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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/15472033/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-25 09:18:20  来源:igfitidea点击:

How to update specific key's value in an associative array in PHP?

phparraysassociative-array

提问by PHPLover

I've a following associative array named $data

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

)

and I want to convert the value of key [transaction_date]into user readable format (i.e. mm/dd/yyyy). For that I written the following code in a function which returns the whole array:

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

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

    return $data;

My problem is I'm getting the same array without changing the value of [transaction_date]for all the array elements. Actually array with updated values for [transaction_date]is expected to be returned. Can anyone help me out to resolve this issue? Thanks in advance.

我的问题是我得到了相同的数组而不改变[transaction_date]所有数组元素的值。实际上,[transaction_date]预计将返回具有更新值的数组。谁能帮我解决这个问题?提前致谢。

回答by Rikesh

Change your foreach to something like this, You are not assigning data back to your return variable $dataafter performing operation on that.

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

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

Codepad DEMO.

键盘演示。

回答by Thank you

This will work too!

这也行!

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

Yay for alternatives!

是的替代品!

回答by SJ00

PHP array_walk()function is specifically for altering array.

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

Try this:

尝试这个:

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

回答by Naveenkumar N

Use array_walk_recursive function for multi-denominational array.

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

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

回答by Ivan Fretes

This a single solution, in where your_fieldis a field that will set and new_valueis a new value field, that can a function or a single value

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

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

In your case new_valuewill be a date() function

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

回答by CoBolt

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