php 5.4+ 推荐用[]声明数组,更简洁安全;老版本才用array(),但嵌套易出错;二维及混合数组需明确键名;动态追加多维元素须先初始化父级;定义时应统一结构以保障可读性与稳定性。

直接用 [] 声明最安全,PHP 5.4+ 推荐
PHP 5.4 起支持短数组语法 [],它比 array() 更简洁、更易读,且在嵌套时缩进清晰,不容易漏括号。老项目若需兼容 PHP 5.3 及以下,才必须用 array()。
- 二维索引数组:
$data = [['a', 'b'], ['c', 'd']]; - 二维关联数组:
$users = [['name' => 'Tom', 'id' => 1], ['name' => 'Lily', 'id' => 2]]; - 混合键名(推荐明确键):
$config = ['db' => ['host' => 'localhost', 'port' => 3306], 'cache' => ['ttl' => 3600]];
array() 在低版本 PHP 中必须用,但嵌套易出错
写多层 array() 时,括号匹配极易混乱,尤其混用索引和关联结构时。错误常表现为 Parse error: syntax error, unexpected ',' 或运行时 Notice: Undefined index。
- 典型错误写法(少了一个
)):$arr = array(array('x'=>1), array('y'=>2), array('z'=>3); - 正确写法(注意层级闭合):
$arr = array(array('x'=>1), array('y'=>2), array('z'=>3)); - 关联 + 索引混用要格外小心键名是否加引号:
array('items' => array(0 => 'first', 1 => 'second')),不加引号的数字键会被自动转为整型,但字符串键如'0'会保留为字符串——这会影响isset()和循环行为。
动态追加维度时,别直接写 $arr[][] = 而不初始化
PHP 允许用空索引 [] 追加元素,但对多维结构,第二层及以上必须先存在,否则报 Warning: Cannot use a scalar value as an array。
- 错误示例:
$list[]['id'] = 123;——$list[]返回的是新索引值(如 0),不是数组,后续['id']就非法了 - 正确做法(显式初始化):
$list[] = ['id' => 123, 'name' => 'foo'];或分步:$list[0] = []; $list[0]['id'] = 123; - 如果真要动态构造,先确保父级是数组:
if (!is_array($list[$i])) $list[$i] = [];
定义时就该想好访问方式,避免后期 foreach 嵌套翻车
多维数组的结构直接影响遍历逻辑。比如用 ['users'][0]['name'] 访问,和用 ['users'][0][0] 访问,背后是完全不同的键设计。一旦定义随意,后面 foreach 里就得反复 is_array() 判断或硬写索引,维护成本陡增。
- 结构不一致是高频坑:一个子数组有
'email'键,另一个没有,$user['email']就可能触发Undefined index - 建议定义时统一结构,哪怕填
null或空字符串:['name' => 'Alice', 'email' => null, 'role' => 'user'] - 如果数据来自 API 或数据库,优先用
array_map()或循环做标准化,而不是在每次访问时补判断
foreach、array_column()、json_encode() 的稳定性和可读性。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











