猿问

将关联数组的数组减少为关联数组

有没有一种惯用的方式(一些现有的功能)来减少

[[0 => 'zero'], [1 => 'one']]

[0 => 'zero', 1 => 'one']

?

很容易只创建一个循环来完成这项工作,但它似乎效率低下,我显然更喜欢这里的单线。

编辑:哦,这里 0 和 1 相互跟随只是随机的。数组也可以是[[2 => 'two'], [3 => 'three']]


斯蒂芬大帝
浏览 143回答 2
2回答

米琪卡哇伊

假设您希望保留键,并假设在键冲突的情况下,您想要第一个值,array_reduce则非常适合该任务。$r = array_reduce($a, function ($acc, $v) { return $acc + $v; }, []);这在功能上与@Rakesh Jakhar 的解决方案相同。我认为它在语义上更忠实于问题,并且避免了初始化$r和use子句。在 php 7.4 中,这可以用箭头函数写得更好一些:$r = array_reduce($a, fn($acc, $v) => $acc + $v, []);https://www.php.net/manual/en/function.array-reduce.php

阿波罗的战车

您可以array_merge与...splat 运算符一起使用$a = [[0 => 'zero'], [1 => 'one']];print_r(array_merge(...$a));解决方案二:保留密钥$a = [[1 => 'one'], [0 => 'zero']];$r = [];array_walk($a, function($v, $k) use (&$r){ $r += $v;});print_r($r);工作演示:https : //3v4l.org/9sRaE
随时随地看视频慕课网APP
我要回答