php中空数组有两种等效表示方式:[]和array(),前者自5.4起引入、更简洁,后者兼容所有版本,功能与底层行为完全一致。

怎么快速定义一个空数组?两种写法都有效
PHP里创建空数组最常用的就是两种写法:$arr = []; 和 $arr = array();。前者是PHP 5.4起引入的短数组语法,更简洁;后者是传统方式,兼容性更好。两者在功能和底层行为上完全等价,选哪个主要看项目规范或团队习惯。
空数组不是“没东西”,而是一个有序映射结构
PHP数组本质不是C语言那种连续内存块,而是一个有序哈希表(ordered hash table)。哪怕刚声明为空数组,PHP也会立即为其分配一个最小容量的哈希表结构,包含桶(bucket)数组、大小标记、元素计数等元信息。
- 这个结构支持混合键:整数索引自动递增,字符串键按哈希分布
- 插入第一个元素时,不触发扩容;但当元素增多、冲突变多,PHP会自动重建更大哈希表
- 空数组占用内存极小(通常几百字节),但已具备完整数组行为:可遍历、可isset()、可array_key_exists()
?array 是类型声明,不是创建空数组的方法
很多人混淆 ?array 的用途——它不是用来“创建”空数组的,而是用于函数参数、返回值或属性的类型声明,表示该位置允许传入数组或null值。
- 正确用法:
function handle(?array $data) { ... },调用时可传['a','b']或null - 错误理解:
$x = ?array;这样写会报语法错误 - 若想让变量既能存数组又能存null,只需声明类型(如PHPDoc或PHP 7.1+类型提示),赋值时直接给
null或[]即可
实际开发中几个关键细节
空数组看似简单,但几个边界情况容易踩坑:
-
empty([])返回 true,isset($arr)也返回 true(变量存在),但count($arr) === 0才是判断“真为空”的可靠方式 - 用
foreach([] as $v)安全,不会报错也不会执行循环体 - JSON编码空数组得到
[],不是null;若需输出null,得显式检查后返回 - 从数据库或API取数据时,空结果集常被转为
[],而非null;是否要统一处理为null,取决于业务语义
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











