61

我有一个名为$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]实际上,预计将返回具有更新值的数组。谁能帮我解决这个问题?提前致谢。

4

7 回答 7

112

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

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

键盘演示。

于 2013-03-18T08:00:12.227 回答
46

这也行!

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

是的替代品!

于 2013-05-05T08:27:53.393 回答
19

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

试试这个:

array_walk ( $data, function (&$key) { 
    $key["transaction_date"] = date('d/m/Y',$key["transaction_date"]); 
});
于 2013-09-21T14:40:58.617 回答
7

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

array_walk_recursive($data, function (&$v, $k) { 
    if($k == 'transaction_date'){ 
        $v = date('d/m/Y',$v); 
    } 
});
于 2017-12-14T07:09:54.200 回答
2

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

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

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

于 2020-10-01T03:53:57.170 回答
1

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

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

在你的情况下new_value将是一个 date() 函数

于 2019-06-17T20:43:38.333 回答
0
foreach($data as $value)
{
    $value["transaction_date"] = date('d/m/Y',$value["transaction_date"]);
}
return $data;
于 2013-03-18T08:02:50.590 回答