PHP中定义空数组最常用的是$arr = [];,配合array_push()时需注意:未声明变量直接push会触发E_NOTICE警告;[]初始化比array()更简洁;批量追加用array_push($arr, 'x', 'y')更高效;PHP 7.4+推荐用[...$arr, 'x']实现函数式追加。

PHP中定义空数组最常用的是 $arr = [];,但配合 array_push() 时,有几点容易被忽略的细节,直接影响代码健壮性和性能。
空数组无需显式初始化也能直接 push
PHP 允许对未声明的变量直接调用 array_push(),它会自动创建索引数组并追加元素:
array_push($items, 'apple'); // $items 自动变为 ['apple'] array_push($items, 'banana'); // 变为 ['apple', 'banana']
但这种写法依赖 error_reporting 设置 —— 若开启 E_NOTICE(如开发环境),会触发 “Undefined variable” 警告。生产环境虽可能屏蔽,但不推荐依赖隐式行为。
用 [] 初始化比 array() 更简洁且语义清晰
PHP 5.4+ 推荐使用短数组语法,尤其在配合 array_push() 前明确初始化:
立即学习“PHP免费学习笔记(深入)”;
-
$list = [];—— 简洁、现代、无歧义 -
$list = array();—— 兼容旧版本,但多打字符,语义稍弱 -
$list = null;或$list = '';—— 错误!后续array_push()会报Warning: array_push() expects parameter 1 to be array
批量追加时,array_push() 比多次 [] 赋值更高效
当需要一次性添加多个元素,array_push() 内部优化优于循环赋值:
// 推荐:一次调用,底层 C 实现优化 array_push($data, 'x', 'y', 'z'); // 不推荐:三次函数调用 + 三次数组扩容判断 $data[] = 'x'; $data[] = 'y'; $data[] = 'z';
注意:若已知元素数量且结构固定,直接用数组字面量更高效:$data = ['x', 'y', 'z']; —— 这是最快的初始化方式,array_push() 适用于“动态累积”场景。
替代方案:现代 PHP 更倾向用“展开运算符 + 数组合并”
PHP 7.4+ 支持展开运算符(...),配合 array_merge() 可实现更函数式、可读性更强的追加逻辑:
-
$new = [...$old, 'a', 'b'];—— 创建新数组,不修改原数组 -
$old = [...$old, 'a', 'b'];—— 效果类似array_push(),但语义更明确(重赋值) - 优势:无副作用、便于链式处理、适合不可变数据流场景
不过,若需复用同一数组变量并频繁追加,array_push() 仍是最轻量的原地操作选择。



















