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

PHP使用array_merge合并数组时数值索引被重置该如何解决

PHP合并数组保留原索引、重复键保留先出现值的解决方案

问题根因

你遇到的索引重置问题是array_merge()函数的固有特性:

  • 处理字符串类型键名时,后传入的数组同键值会覆盖先传入数组的值
  • 处理数字/数字字符串类型键名时,会直接丢弃原索引,统一从0开始重新编号
    这两点刚好与你的需求完全相悖。

解决方案

直接使用PHP数组的+运算符替换array_merge()即可,+运算符的规则完全匹配你的需求:

  • 无论键是字符串类型还是数字类型,都会原样保留原索引,不会做重排处理
  • 两个数组出现同键名时,永远保留左侧数组(先出现)的值,右侧数组(后出现)的同键值会被自动忽略

修改后的代码

foreach ($options as $key => $option) {
    $optionName = $option->{"attributeName"};
    $subOptions = array_flip($option->{"predefinedStringValues"});
    if (!isset($optionList[$optionName])) {
        $optionList[$optionName] = $subOptions;
    } else {
        // 仅修改这一行即可,注意已有数组要放在+左侧,新数组放右侧
        $optionList[$optionName] = $optionList[$optionName] + $subOptions;
    }
}

效果验证

用你给出的示例数组计算Array1 + Array2,输出结果与你期望的Array4完全一致:

  • 重复键Onesize保留Array1中的值2,不会被Array2中的0覆盖
  • Array2中的数字键24、25、26等全部保留原键名,不会被重新编号

内容的提问来源于stack exchange,提问作者Grimclaw Draven

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:15:04