必须初始化数组再使用$arr[] = $value,否则null或标量触发警告;推荐显式初始化或is_array()校验;单元素追加用[]语法,多元素用array_push();合并数组需按语义选array_merge、+或array_replace。

直接用 $arr[] = $value 前必须确保数组已初始化
这是最常踩的坑:变量未定义或为 null 时直接写 $arr[] = 'x',会触发 Warning: Cannot use a scalar value as an array。PHP 不会自动把 null 或字符串转成数组。
- 错误写法:
$fruits = null; $fruits[] = 'apple'; - 安全写法:先显式初始化,
$fruits = [];或$fruits = array();,再追加 - 如果来源不确定(比如从函数返回、配置读取),建议加判断:
if (!is_array($fruits)) $fruits = [];
array_push() 和 [] 语法的性能与语义差异
array_push() 是函数调用,[] 是语言结构 —— 后者更快,尤其在循环中高频追加时差异明显。
- 单元素追加:优先用
$arr[] = $val;,简洁且无函数开销 - 多元素一次性追加:用
array_push($arr, $a, $b, $c)更清晰,比连写三行[]更易维护 - 注意:
array_push()返回新数组长度,不是数组本身;而[]无返回值
合并数组时别混淆 array_merge()、+ 和 array_replace()
它们对键名的处理逻辑完全不同,选错会导致数据丢失或覆盖出乎意料。
-
array_merge($a, $b):数字键重排,字符串键后覆盖前;适合拼接索引数组 -
$a + $b:保留左数组键,右数组同键被忽略;适合“默认配置 + 用户覆盖”场景 -
array_replace($a, $b):字符串键后覆盖前,数字键不重排(保留原键);适合深度配置合并 - 多维合并?
array_merge_recursive()会把同名非数组值转成数组,比如['count' => 1]和['count' => 2]合并后是['count' => [1, 2]],这往往不是你想要的
关联数组里更新或添加键值对,别用 => 语法
在已有数组上动态赋值,只能用方括号语法 $arr['key'] = $value。误写成 $arr['key'] => $value 是语法错误,PHP 解析不过去。
- 正确:
$user['email'] = 'test@example.com';(存在则更新,不存在则新增) - 错误:
$user['email'] => 'test@example.com';(Parse error) - 注意:关联数组的键区分大小写,
$arr['Name']和$arr['name']是两个不同键
is_array() 检查一行代码就能避免后续所有追加操作报错。别依赖“它应该是个数组”这种假设。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











