直接赋值($arr[] = $value)单元素添加时效率显著高于array_push(),因无函数调用开销;多元素追加或需指定键名时则分别适用array_push()或直接赋值。

直接赋值($arr[] = $value)比 array_push() 效率更高,尤其在单次添加一个元素时。
单元素添加:[] 明显更快
每次调用 array_push() 都涉及函数调用开销——参数压栈、作用域切换、返回值处理等。而 $arr[] = $value 是语言级语法,直接操作数组内部指针,无额外调用成本。
- 百万次循环测试中,
$arr[] = $i耗时约 0.52 秒,array_push($arr, $i)耗时约 6.36 秒(PHP 7.x 环境) - 即使在小规模操作中,差异虽不明显,但原理上始终存在函数调用的“固定损耗”
- 若第一个参数非数组,
array_push()会触发警告;而$arr[]在$arr未定义时会自动初始化为空数组(PHP 7.1+)
多元素添加:array_push 有优势
当一次要追加 5 个、10 个甚至几十个值时,array_push() 的可变参数设计更简洁,也避免了重复写多行 [] 赋值。
- 例如:
array_push($arr, $a, $b, $c, $d, $e)比五次$arr[] = ...更紧凑 - 性能测试显示:批量压入(如每轮 50 个元素),
array_push()反而比逐个[]略快(0.29s vs 0.46s),因减少了数组长度检查和指针更新次数 - 但注意:这不意味着它“更底层”,而是函数内部做了合并优化;单纯从语言机制看,仍属封装调用
关联键名场景:只能用直接赋值
array_push() 只能追加到末尾并生成数字索引,无法指定键名。一旦需要 $arr['status'] = 'active' 或 $arr[$id] = $data,就必须用方括号赋值语法。
立即学习“PHP免费学习笔记(深入)”;
- 试图用
array_push()添加关联元素,结果只会得到新数字键,原意丢失 - 混合使用(先数字索引后关联键)会导致数组结构混乱,影响
foreach行为和 JSON 编码结果 - 若需保持键名语义清晰、调试友好或对接前端约定,直接赋值是唯一可靠方式
实际开发建议
不必教条地“禁用”array_push(),但应按场景理性选择:
- 循环内单次追加 → 一律用
$arr[] = $val - 一次性注入多个已知值 → 可选
array_push(),也可用array_merge($arr, [$v1, $v2])(后者返回新数组,适合函数式风格) - 需要指定键、处理关联数据、或变量可能非数组 → 只用直接赋值,安全且意图明确
- 团队规范允许时,可统一用
[]提升一致性,减少认知负担



















