php数组创建中array()和[]均可,但索引数组需注意键连续性与重置用array_values(),关联数组键名必须加引号防常量解析歧义,多维访问须用??或array_key_exists()防notice,混用索引与关联键严重损害可维护性。

PHP 里创建数组根本不用“选方法”,array() 和 [] 都行,但默认行为、可读性和 PHP 版本兼容性差异很大,直接决定你后面改 bug 的时间。
索引数组:下标从 0 开始不是必须的,但跳着写会出事
用 [] 创建时,PHP 自动按顺序分配数字键(0, 1, 2…),但如果你手动指定非连续数字,比如 [0 => 'a', 2 => 'b'],中间的 1 就空着,count() 还是算 2,但 foreach 遍历时不会跳过——它只看键是否存在。
- 别写
$arr = [1 => 'x', 0 => 'y'],顺序和键对不上,容易误判逻辑 - 想重置索引就用
array_values($arr),别靠重新赋值硬凑 - PHP 8.1+ 支持
[...$arr]展开,但仅限一维,且要求$arr是数组,否则报TypeError
关联数组:键名加引号不是可有可无,是语法安全线
写 ['name' => 'Tom', 'age' => 25] 没问题;但写 [name => 'Tom'](没引号)会让 PHP 先找常量 name,找不到就当字符串,看似能跑,一旦定义了同名常量就崩。
- 所有字符串键名必须用单引号或双引号包裹,
'user_id'不是风格问题,是避免解析歧义 - 数字字符串做键(如
'123')会被 PHP 自动转成整型键123,和123键等价,array_keys()返回的是整型 - 布尔值做键会被转成
0(false)或1(true),慎用
多维数组:嵌套方括号合法,但深层访问前先判断存在
写 $data = ['user' => ['profile' => ['id' => 1]]] 没问题,但直接读 $data['user']['profile']['id'] 在任意一层缺失时会触发 Notice: Undefined index。
- 用
??空合并操作符最省事:$id = $data['user']['profile']['id'] ?? null - PHP 8.0+ 可用
array_key_exists('profile', $data['user'] ?? []),但注意?? []要包住前一级,不然$data['user']本身不存在就报错 - 不要用
isset($data['user']['profile']['id'])判断值是否为null,它对0、false、''都返回false
真正麻烦的从来不是怎么写出来,而是别人改你代码时,看到 [1=>'a', 'b'] 这种混用索引和关联的写法,得花三分钟猜你本意是想建索引数组还是漏写了键——这种模糊性比语法本身更伤协作效率。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











