【发布时间】:2016-09-01 17:33:12
【问题描述】:
我有这个初始数组:
[
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'];
},
[]
);
但它返回此错误Cannot use a scalar value as an array。我究竟做错了什么? array_reduce 不能接收数组作为初始值吗?
【问题讨论】:
-
你需要使用数组函数还是手动会好?
-
我正在尽可能地发挥功能,我知道一个简单的 foreach 可以解决问题。
-
根本不是 array_reduced 应该做的:
$newArray = array_column($oldArray, 'value', 'id'); array_walk($newArray, function(&$value) { $value = ['value' => $value]; });Demo -
哦,那行得通。如果您发布答案,我将很乐意接受它
标签: php arrays dictionary reduce