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

时间:2013-03-18 07:57:32

标签: 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
        )

)

我希望将密钥[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]更新值的数组。 任何人都可以帮我解决这个问题吗?提前谢谢。

7 个答案:

答案 0 :(得分:85)

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

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

Codepad DEMO.

答案 1 :(得分:30)

这也会有效!

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

是的替代方案!

答案 2 :(得分:13)

PHP array_walk()函数专门用于更改数组。

试试这个:

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

答案 3 :(得分:4)

对多宗派数组使用array_walk_recursive函数。

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

这是一个单一的解决方案,其中 your_field 是要设置的字段,而 new_value 是一个新值字段,可以是一个函数或单个值

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

在您的情况下, new_value 将是date()函数

答案 6 :(得分:0)

最好的方法是在“ array_walk”本机函数中使用lambda进行所需的更改:

h3

该值在作为引用“&”传递时在数组中更新。