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

4

是否有常用的方法(某些现有的函数)可以实现减少

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

to

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

很容易创建一个执行任务的循环,但这似乎效率低下,我肯定更喜欢使用一行代码来完成。

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


1
当您给我点踩时,请在评论中说明原因。我认为我的问题完全合理。 - IceFire
1
@FedericoklezCulloca 对,我不这么做。我只是听说在SO上随意分配负面评价的趋势可能会使整个网络变得不好用。这是一个坏趋势,我尽可能地试图抵制它。但对于我个人来说,无论如何。 - IceFire
2个回答

6

您可以使用array_merge函数与...扩展运算符

$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


1
或者在不支持 ... 的情况下使用 call_user_func_array - u_mulder
哇,这就是我所说的一行代码! - René Beneš
请注意,这会忽略原始数组中的键,因此如果[1 => 'one']是数组中的第一项,则在输出中它将变为0 => 'one':https://3v4l.org/6UopE - naththedeveloper
@naththedeveloper 哦,但这实际上在这里很重要。 - IceFire
@IceFire的解决方案II具有保留键功能。 - Rakesh Jakhar
@RakeshJakhar 嗯,我知道 array_walk 但希望有更短的方法,因为这只是一个低标准的一行代码。无论如何,抱怨也不是重点。如果这是最短的方法,那我就接受了!谢谢 - IceFire

0
假设您想保留键,并且在冲突键的情况下,您想要第一个值,那么array_reduce非常适合这个任务。
$r = array_reduce($a, function ($acc, $v) { return $acc + $v; }, []);

这在功能上与 @Rakesh Jakhar 的解决方案完全相同。我认为它在语义上更忠实于问题,并避免了初始化 $ruse 子句。

在 PHP 7.4 中,可以使用箭头函数编写得更好一些:

$r = array_reduce($a, fn($acc, $v) => $acc + $v, []);

https://www.php.net/manual/en/function.array-reduce.php


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接