You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 07:37:14