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

PHP中array_merge合并数组结果异常,求助解决方法

解决PHP array_merge合并数组不符合预期的问题

嘿,我懂你碰到的困惑了!让我先帮你理清为什么会出现这个结果,再给你解决办法。

问题原因分析

你现在用array_merge得到的结果其实是PHP这个函数的正常行为哦。咱们拆解下两个数组的结构:

  • 第一个数组是关联数组,键是字符串id和name;
  • 第二个数组是索引数组,里面的每个元素又是独立的关联数组。

array_merge的核心规则是:

  • 对于字符串键的元素,后面数组的元素会覆盖前面数组中相同键的元素;
  • 对于数字索引的元素,会把它们追加到结果数组的末尾,并且重新排序索引。

所以你的第二个数组里的每个子数组,都会被当作一个单独的元素追加到第一个数组后面,就出现了你看到的结果——第一个数组的键值对保留,第二个数组的子数组作为数字索引项存在。

解决方案

如果你想要的是把第一个数组也变成一个子数组,和第二个数组的所有子数组放在同一个层级(也就是最终结果是一个包含4个子数组的索引数组),那你只需要把第一个数组先包装成一个单元素数组,再和第二个数组合并就行:

$array1 = ['id' => 12, 'name' => 'Popular'];
$array2 = [
    ['id' => 8, 'name' => 'Flowers'],
    ['id' => 10, 'name' => 'Chocolates'],
    ['id' => 11, 'name' => 'Sweets and Dry Fruits']
];

// 包装第一个数组为子数组后合并
$mergedArray = array_merge([$array1], $array2);
print_r($mergedArray);

运行结果

Array
(
    [0] => Array
        (
            [id] => 12
            [name] => Popular
        )

    [1] => Array
        (
            [id] => 8
            [name] => Flowers
        )

    [2] => Array
        (
            [id] => 10
            [name] => Chocolates
        )

    [3] => Array
        (
            [id] => 11
            [name] => Sweets and Dry Fruits
        )
)

如果你有其他合并需求(比如希望将第一个数组的键值对与第二个数组的子数组进行合并,但这样会出现id和name键的覆盖问题),可以根据具体需求调整实现方式。

内容的提问来源于stack exchange,提问作者Aman Deep

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:14:58