Как обновить конкретное значение ключа в ассоциативном массиве в 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]
будет возвращен.
Может ли кто-нибудь помочь мне решить эту проблему? Спасибо заранее.
Ответы
Ответ 1
Измените свой foreach на что-то вроде этого. Вы не назначаете данные обратно своей возвращаемой переменной $data
после выполнения этой операции.
foreach($data as $key => $value)
{
$data[$key]['transaction_date'] = date('d/m/Y',$value['transaction_date']);
}
Codepad DEMO.
Ответ 2
Это тоже сработает!
foreach($data as &$value) {
$value['transaction_date'] = date('d/m/Y', $value['transaction_date']);
}
Yay для альтернатив!
Ответ 3
PHP Функция array_walk() предназначена специально для изменения массива.
Попробуйте следующее:
array_walk ( $data, function (&$key) { $key["transaction_date"] = date('d/m/Y',$key["transaction_date"]); } );
Ответ 4
Используйте функцию array_walk_recursive для многозначного массива.
array_walk_recursive($data, function (&$v, $k) {
if($k == 'transaction_date'){
$v = date('d/m/Y',$v);
}
});
Ответ 5
foreach($data as $value)
{
$value["transaction_date"] = date('d/m/Y',$value["transaction_date"]);
}
return $data;
Ответ 6
Это единственное решение, в котором your_field является полем, которое будет установлено и новое_значение нового значения поле, которое может функция или одно значение
foreach ($array as $key => $item) {
$item["your_field"] = "new_value";
$array[$key] = $item;
}
В вашем случае new_value будет функцией date()