web-dev-qa-db-ja.com

PHPの連想配列で特定のキーの値を更新する方法は?

私は$dataという名前の次の連想配列を持っています

Array
(
    [0] => Array
        (
            [transaction_user_id] => 359691e27b23f8ef3f8e1c50315cd506
            [transaction_no] => 19500912050218
            [transaction_total_amount] => 589.00
            [transaction_date] => 1335932419
            [transaction_status] => cancelled
        )

    [1] => Array
        (
            [transaction_user_id] => 9def02e6337b888d6dbe5617a172c18d
            [transaction_no] => 36010512050819
            [transaction_total_amount] => 79.00
            [transaction_date] => 1336476696
            [transaction_status] => cancelled
        )

    [2] => Array
        (
            [transaction_user_id] => 9def02e6337b888d6dbe5617a172c18d
            [transaction_no] => 19020512050820
            [transaction_total_amount] => 299.00
            [transaction_date] => 1336476739
            [transaction_status] => cancelled
        )

    [3] => Array
        (
            [transaction_user_id] => 9def02e6337b888d6dbe5617a172c18d
            [transaction_no] => 27050512050821
            [transaction_total_amount] => 79.00
            [transaction_date] => 1336476927
            [transaction_status] => cancelled
        )

    [4] => Array
        (
            [transaction_user_id] => 8e9050a3646c98342b9ba079fba80982
            [transaction_no] => 12070512050822
            [transaction_total_amount] => 129.00
            [transaction_date] => 1336477032
            [transaction_status] => cancelled
        )

)

キー[transaction_date]の値をユーザーが読み取り可能な形式(mm/dd/yyyyなど)に変換したい。そのために、配列全体を返す関数に次のコードを記述しました。

 foreach($data as $value)
        {
            $value[transaction_date]=date('d/m/Y',$value[transaction_date]);
        }

    return $data;

私の問題は、すべての配列要素の[transaction_date]の値を変更せずに同じ配列を取得していることです。実際には、[transaction_date]の更新された値を持つ配列が返されることが期待されています。誰でもこの問題を解決するのを手伝ってくれますか?前もって感謝します。

41
PHPLover

Foreachを次のように変更します。操作を実行した後、戻り変数$dataにデータを割り当てません。

foreach($data as $key => $value)
{
  $data[$key]['transaction_date'] = date('d/m/Y',$value['transaction_date']);
}

コードパッドのデモ

86
Rikesh

これも機能します!

foreach($data as &$value) {
  $value['transaction_date'] = date('d/m/Y', $value['transaction_date']);
}

代わりにイェイ!

33
user633183

PHP array_walk() 関数は配列の変更専用です。

これを試して:

array_walk ( $data, function (&$key) { $key["transaction_date"] = date('d/m/Y',$key["transaction_date"]); } );
13
SJ00

多宗派配列にはarray_walk_recursive関数を使用します。

array_walk_recursive($data, function (&$v, $k) { 
    if($k == 'transaction_date'){ 
        $v = date('d/m/Y',$v); 
    } 
});
4
Naveenkumar N
foreach($data as $value)
{
    $value["transaction_date"] = date('d/m/Y',$value["transaction_date"]);
}
return $data;
1
CoBolt

これは単一のソリューションです。ここで、your_fieldは設定するフィールドであり、new_valueは関数または単一の値である新しい値フィールドです。

foreach ($array as $key => $item) {
   $item["your_field"] = "new_value";
   $array[$key] = $item;
}

あなたの場合new_valueはdate()関数になります

0
Ivan Fretes