array_replace 是 PHP 浅层数组合并函数,按顺序用后续数组值替换或新增首数组键值,保持键名与顺序,数字键严格匹配替换或追加,不递归、不重排。

array_replace 是 PHP 提供的原生函数,用于用后面数组的值“替换”前面数组中同名键的值,实现浅层合并。它不会递归处理多维数组,只作用于第一层键值对。
基本用法:用新值覆盖旧键
语法:array_replace(array $array, array ...$replacements)。第一个参数是被修改的原始数组,后面的每个数组都会按顺序依次覆盖它的对应键。
- 如果后续数组中有原始数组不存在的键,会新增进去
- 如果后续数组中有原始数组已存在的键,该键的值会被替换(不是追加)
- 键为数字索引时,不按顺序合并,而是按键名匹配;若键不存在,则直接追加到末尾
示例:
$a = ['name' => '张三', 'age' => 25, 'city' => '北京']; $b = ['age' => 26, 'job' => '工程师']; $c = ['name' => '李四', 'city' => '上海']; $result = array_replace($a, $b, $c); // 结果:['name'=>'李四', 'age'=>26, 'city'=>'上海', 'job'=>'工程师']
注意数字键的特殊行为
当数组含数字索引时,array_replace 不像 + 运算符那样保留原顺序或跳过重复键,而是严格按“键存在即替换,不存在则追加”逻辑处理:
立即学习“PHP免费学习笔记(深入)”;
$arr1 = [0 => 'a', 1 => 'b']; $arr2 = [1 => 'B', 2 => 'c']; var_dump(array_replace($arr1, $arr2)); // 输出:[0=>'a', 1=>'B', 2=>'c'] —— 键 1 被替换,键 2 新增
而 $arr1 + $arr2 会得到 [0=>'a', 1=>'b'](后者相同数字键被忽略),行为完全不同。
和其它合并方式对比
- + 运算符:左侧优先,右侧同键不生效;不重排数字键;适合“默认值 + 用户输入”场景
- array_merge:数字键重排,字符串键后覆盖前;会把所有数字键重编号为 0,1,2…
- array_replace:保持原键名和顺序,仅替换已有键、追加新键;更贴近“配置覆盖”语义
实际应用建议
- 适合做配置合并:如加载基础配置 → 覆盖环境配置 → 覆盖用户自定义配置
- 避免用于多维数组深层合并,它不会递归;需要深层替换请用
array_replace_recursive - 传入非数组参数会触发警告,建议提前用
is_array()校验 - PHP 5.3+ 可用,无需额外扩展



















