PHP如何合并二维数组且同键名保留最后出现的对应值?
问题解答
现有写法能否实现需求?
不能,存在以下问题:
- 自定义函数
myfunction内部的$x属于未定义变量,运行时会抛出Notice级报错,该变量没有实际作用 array_map的作用是遍历数组每个元素执行回调,执行后返回的依然是二维数组,无法实现合并为一维数组的效果- 逻辑本身没有处理「同键名保留最后出现的值」的规则,完全不符合需求
更合适的实现方案
PHP原生就提供了非常简便的实现方式,不需要自定义复杂逻辑:
方案1(PHP 5.6+ 推荐)
利用参数展开运算符...配合array_merge,一行代码即可实现:
$result = array_merge(...$a);
原理:array_merge接收多个数组作为参数,遇到相同的字符串键时,后面传入的数组的值会覆盖前面的值,正好符合你要求的「同键名保留最后出现的值」的规则,...$a会直接把二维数组拆成多个单元素数组传入array_merge。
方案2(兼容低版本PHP)
如果使用的PHP版本低于5.6,不支持参数展开运算符,可以用array_reduce实现:
$result = array_reduce($a, function($carry, $item) { return array_merge($carry, $item); }, []);
两种方案执行后得到的$result就是你需要的一维数组结构。
内容的提问来源于stack exchange,提问作者kiabws
相关产品推荐
相关产品推荐

