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

PHP按键合并数组并保留第二个数组的值,如何实现预期结果?

保留数字键名合并数组并覆盖重复键值

问题原因

你使用的array_merge()函数会重置数字类型的索引键,将其重新从0开始连续编号,因此原本的18-23这些数字键会丢失,导致结果不符合预期。

解决方案

方案1:使用array_replace()函数

array_replace()的作用是用后续数组的值覆盖前序数组的对应键,同时完整保留所有原始键名(包括数字键),完全匹配你的需求:

$array_1 = array(18 => 0, 19 => 0, 20 => 0, 21 => 0, 22 => 0, 23 => 0);
$array_2 = array(22 => 3, 23 => 4);

$result = array_replace($array_1, $array_2);
var_dump($result);

执行结果:

array(6) {
  [18]=> int(0)
  [19]=> int(0)
  [20]=> int(0)
  [21]=> int(0)
  [22]=> int(3)
  [23]=> int(4)
}

方案2:使用+运算符(注意数组顺序)

+运算符会合并数组,但仅保留左侧数组的键,右侧数组中与左侧重复的键会被忽略。因此需要将想要保留值的数组(即$array_2)放在左侧,确保其键值优先级更高:

$array_1 = array(18 => 0, 19 => 0, 20 => 0, 21 => 0, 22 => 0, 23 => 0);
$array_2 = array(22 => 3, 23 => 4);

$result = $array_2 + $array_1;
var_dump($result);

此代码执行结果与方案1一致。

两种方案的区别

  • array_replace():会无条件用后续数组的键值覆盖前序数组的对应键,支持字符串和数字键的覆盖;
  • +运算符:仅保留左侧数组的键值,右侧重复键会被跳过,更适合需要“左侧优先”的合并场景。

内容的提问来源于stack exchange,提问作者Sudo Sur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:35:29