PHP array_reduce 初始参数为数组

标签 php arrays dictionary reduce

我有这个初始数组:

[
    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 可以解决问题,因为它 reduces 数组为单个值,在本例中为数组。所以我尝试了:

array_reduce(
    $array,
    function($carry, $item) {
        return $carry[$item['id']] = $item['value'];
    },
    []
);

但它返回此错误 Cannot use a scalar value as an array。我究竟做错了什么? array_reduce 不能接收数组作为初始值吗?

最佳答案

您的 array_reduce 没有工作,因为您没有从回调函数返回累加器数组(在您的情况下为 carry)。

array_reduce(
    $array,
    function($carry, $item) {
        $carry[$item['id']] = $item['value'];
        return $carry; // this is the only line I added :)
    },
    []
);

我在寻找使用 array_reduce 的方法时遇到了这个问题,所以我觉得我应该写这篇评论。我希望这对 future 的读者有所帮助。 :)

关于PHP array_reduce 初始参数为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37075840/

相关文章:

php - 在 AJAX SUCCESS 上更改并保存 SPAN CSS,然后检索保存的信息

javascript - 检查数组是否包含javascript中的数组

php - mysql 抑制重复键错误

Java 数组打印出奇怪的数字和文本

java - java中的栈是如何实现的?

python - 如何在循环内的字典中的键中添加值?

Python 元组作为键慢?

用于多键查找的 C++ map 与 multimap

php - 在客户端使用网络摄像头录制视频并上传到php服务器

php - 发送 Guzzle 的 "async"请求而不调用 "wait"