我有这个初始数组:
[
0 => ['id' => 5, 'value' => 50],
1 => ['id' => 6, 'value' => 60],
2 => ['id' => 7, 'value' => 70],
]
并希望将其转换为:
[
5 => ['value' => 50],
6 => ['value' => 60],
7 => ['value' => 70],
]
最初,我尝试使用map,但是它不能修改数组键,因此我认为reduce可以解决问题,因为它将数组减少为单个值,在这种情况下为数组.所以我尝试了:
array_reduce(
$array,
function($carry, $item) {
return $carry[$item['id']] = $item['value'];
},
[]
);
但是它返回此错误.无法将标量值用作数组.我究竟做错了什么? array_reduce是否不能接收数组作为初始值?
解决方法:
正如马克·贝克德(Mark Bakerdid)所言.我也做了foreach循环.
$arr = array(
array('id' => 5, 'value' => 50),
array('id' => 6, 'value' => 60),
array('id' => 7, 'value' => 70)
);
$result = array();
$result = array_column($arr, 'value', 'id');
array_walk($result, function(&$value) { $value = ['value' => $value]; });
//I did this using foreach loop, But the OP need it through array function.
//foreach($arr as $key => $value){
// $result[$value['id']] = array('value' => $value['value']);
//}
echo '
';
print_r($result);
结果:
Array
(
[5] => Array
(
[value] => 50
)
[6] => Array
(
[value] => 60
)
[7] => Array
(
[value] => 70
)
)
标签:dictionary,reduce,arrays,php
来源: https://codeday.me/bug/20191118/2030132.html