如何在PHP中的关联数组中更新特定键的值?

PHP*_*ver 43 php arrays associative-array

我有一个名为的以下关联数组 $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
        )

)
Run Code Online (Sandbox Code Playgroud)

我想将key的值转换[transaction_date]为用户可读格式(即mm/dd/yyyy).为此,我在一个返回整个数组的函数中编写了以下代码:

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

    return $data;
Run Code Online (Sandbox Code Playgroud)

我的问题是我得到了相同的数组而没有改变[transaction_date]所有数组元素的值.实际上,[transaction_date]预计将返回具有更新值的数组.任何人都可以帮我解决这个问题吗?提前致谢.

Rik*_*esh 90

将foreach更改为类似的内容,$data在执行操作后,您不会将数据分配回返回变量.

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

键盘演示.

  • 在其范围内更新foreach变量数组不会改变其值.http://stackoverflow.com/questions/5810168/php-foreach-by-reference-causes-weird-glitch-when-going-through-array-of-objects (6认同)

Tha*_*you 34

这也会奏效!

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

是的替代品!

  • 这是正确答案..你需要一个& - 其他方式(接受)是那种微妙的"黑客" - 即通过`接受@Rikesh工作answer``indirectly`对于那些没有明显的原因,即许多人来说可能看起来像一个)的作品,但实际上b )正在发生,当你需要c)一直... @ naomik的答案是正确的"c)"而"a)"将起作用它不是要走的路 (4认同)
  • 你的工作和救了我的生命...谢谢 (2认同)

SJ0*_*J00 13

PHP array_walk()函数专门用于改变数组.

试试这个:

array_walk ( $data, function (&$key) { $key["transaction_date"] = date('d/m/Y',$key["transaction_date"]); } );
Run Code Online (Sandbox Code Playgroud)


小智 6

对多面额数组使用 array_walk_recursive 函数。

array_walk_recursive($data, function (&$v, $k) { 
    if($k == 'transaction_date'){ 
        $v = date('d/m/Y',$v); 
    } 
});
Run Code Online (Sandbox Code Playgroud)