array_push()适合批量添加,但循环中调用易致逻辑错误和性能差;$arr[] = 'x'更轻量且兼容关联数组;头部插入必用array_unshift()但开销大;array_merge()会覆盖同名键,+运算符左优先合并。

用 array_push() 往数组末尾加元素,但别在循环里反复调用
它是最直觉的末尾追加方式,适合一次性塞多个值。但要注意:每次调用都会重新计算数组长度、可能触发内存重分配——如果在 for 或 foreach 里边遍历边 array_push(),逻辑容易错乱,性能也差。
- 推荐场景:批量添加已知的几个值,比如
array_push($arr, 'a', 'b', 'c') - 不推荐场景:一边遍历
$arr,一边往里面array_push()—— 你无法预测循环何时结束 - 等价写法:
$arr[] = 'new'更轻量,单元素插入时优先用这个
[] 语法直接追加最常用,但注意关联数组和索引数组行为一致
很多人以为 $arr[] = 'x' 只适用于数字索引数组,其实它对关联数组也生效:PHP 会自动分配下一个整数键(哪怕原数组全是字符串键)。这不是 bug,是语言定义的行为。
- 示例:
$arr = ['name' => 'Tom']; $arr[] = 'age';→ 结果是['name'=>'Tom', 0=>'age'] - 想保持纯关联结构?就别用
[],改用明确赋值,比如$arr['age'] = 25 - 性能上,
[]比array_push()略快,因为少一层函数调用开销
头部插入必须用 array_unshift(),但会重排所有键,慎用于大数组
没有类似 [] 的头部快捷语法。用 array_unshift() 会在开头塞一个或多个元素,并把原有所有键+1(索引数组)或全部重索引(关联数组也会被强制转成数字键再重排)。
- 副作用明显:原数组若有
0、1键,插入后变成1、2;关联键如'id'会被丢掉 - 性能敏感场景(数组 > 1000 元素),避免频繁调用;可考虑反转→尾插→再反转的 trick,但只在极端情况值得这么做
- 替代思路:如果只是临时需要“头插语义”,用 SplStack 或自己维护一个栈结构更可控
用 array_merge() 拼接数组时,键名冲突会覆盖,不是简单叠加
它常被误当成“安全拼接工具”,但实际行为取决于键类型:数字键会重索引,字符串键则后者覆盖前者。这不是 bug,是设计如此。
立即学习“PHP免费学习笔记(深入)”;
- 示例:
array_merge(['a'=>1], ['a'=>2])→['a'=>2],前面的被干掉了 - 想保留所有键?用
+运算符:$a + $b是左优先合并,重复字符串键取左边,数字键不重排 - 注意:
+不递归,嵌套数组不会合并深层内容;array_merge_recursive()才处理嵌套,但也有自己的覆盖规则
[] 插过一次,后续再用 array_merge() 就可能意外丢数据。这种问题往往要到线上跑一阵子才暴露。










