PHP中如何将等长数组的元素合并到现有数组对象中?
PHP实现等长数组对应对象元素合并
PHP开发中,我需要将另一个等长数组中的内容添加到现有数组的对应对象中,作为额外元素。经过25次以上Stack Overflow搜索、耗时超1小时仍未解决,特提出问询。
尝试过的方法
for ($i = 0; $i <= 3; $i++) { array_push($upper_lower[$i], $candidate_results[$i]); } $output = array_intersect($upper_lower, $candidate_results); $output = $upper_lower+$candidate_results; array_push($upper_lower, ...$candidate_results);
执行结果
无报错,但结果均不符合预期:多数方法将第二个数组追加到第一个数组末尾,部分方法虽能添加元素,但新元素处于独立对象中(如{"E_Jones": 6})。
现有数组
数组1($upper_lower)
$upper_lower = [ [ "factor" => "Factor1", "Upper_Boundary" => 8, "Lower_Boundary" => 5, "D_Allen" => 8 ], [ "factor" => "Factor2", "Upper_Boundary" => 7, "Lower_Boundary" => 4, "D_Allen" => 4 ], [ "factor" => "Factor3", "Upper_Boundary" => 9, "Lower_Boundary" => 7, "D_Allen" => 7 ], [ "factor" => "Factor4", "Upper_Boundary" => 8, "Lower_Boundary" => 6, "D_Allen" => 8 ] ];
数组2($candidate_results)
$candidate_results = [ ["E_Jones" => 5], ["E_Jones" => 9], ["E_Jones" => 3], ["E_Jones" => 6] ];
期望合并结果
$combinedarrays = [ [ "factor" => "Factor1", "Upper_Boundary" => 8, "Lower_Boundary" => 5, "D_Allen" => 8, "E_Jones" => 5 ], [ "factor" => "Factor2", "Upper_Boundary" => 7, "Lower_Boundary" => 4, "D_Allen" => 4, "E_Jones" => 9 ], [ "factor" => "Factor3", "Upper_Boundary" => 9, "Lower_Boundary" => 7, "D_Allen" => 7, "E_Jones" => 3 ], [ "factor" => "Factor4", "Upper_Boundary" => 8, "Lower_Boundary" => 6, "D_Allen" => 8, "E_Jones" => 6 ] ];
解决方案
方法1:循环遍历合并
通过遍历数组索引,使用array_merge()将对应位置的两个关联数组合并,直接把第二个数组的键值对整合到第一个数组中:
$combinedarrays = []; $length = count($upper_lower); for ($i = 0; $i < $length; $i++) { $combinedarrays[] = array_merge($upper_lower[$i], $candidate_results[$i]); }
方法2:使用array_map简化代码
利用array_map()同时遍历两个数组,对对应位置的元素执行合并操作,代码更简洁:
$combinedarrays = array_map(function($item1, $item2) { return array_merge($item1, $item2); }, $upper_lower, $candidate_results);
原方法失效原因
array_push($upper_lower[$i], $candidate_results[$i]):是将$candidate_results[$i]作为一个子数组元素添加到$upper_lower[$i]中,而非合并键值对,导致出现嵌套结构。array_intersect():用于查找数组交集,完全不符合合并键值对的需求。$upper_lower + $candidate_results:仅合并数组键,由于两个数组都是数字索引,会直接将第二个数组的元素追加到第一个数组末尾,无法对应位置合并。array_push($upper_lower, ...$candidate_results):将第二个数组的所有元素批量追加到第一个数组末尾,同样是拼接而非对应合并。
内容的提问来源于stack exchange,提问作者ND_Coder
相关产品推荐
相关产品推荐

