PHP如何在不改变原有键名的前提下合并多维数组
PHP 保留原键名合并多维子数组实现方案
核心注意:PHP 原生array_merge()会自动重置数字类型的键名,无法满足保留自定义数字键的需求,可使用以下两种方法实现:
方法1:使用数组追加运算符 +
运算符规则:$a + $b 会保留两个数组的所有键名,相同键名优先保留左侧数组的对应值,不会对数字键做重新索引。
实现代码:
// 定义原始数组 $original = [ [ 'image' => 'logo.jpg', 'name' => 'data', 'server' => 'Mirani Rahmawati', 6 => 5 ], [ 'image' => 'logo.jpg', 'name' => 'data', 'server' => 'Mirani Rahmawati', 5 => 150 ] ]; $merged = []; foreach ($original as $sub) { // 同键名保留先出现的值,如需后出现的值覆盖就改成 $merged = $sub + $merged $merged = $merged + $sub; } // 按需求把合并结果放到索引0的位置 $result = [$merged]; // 输出验证 print_r($result);
方法2:使用 array_replace() 函数
函数规则:按顺序合并多个数组,相同键名后面数组的值会覆盖前面的,全程保留原始键名,适合需要后值覆盖前值的场景。
实现代码(仅合并逻辑部分,其余和方法1一致):
$merged = []; foreach ($original as $sub) { $merged = array_replace($merged, $sub); } $result = [$merged];
两种方法最终输出都和你要求的目标结构完全一致,自定义数字键5、6不会被重置,字符串键也全部保留。
内容的提问来源于stack exchange,提问作者Jimbo
相关产品推荐
相关产品推荐

