PHP获取数组第一个元素最安全的方法是reset($arr),它重置内部指针并返回首个元素值,兼容索引与关联数组,不修改原数组;直接$arr[0]需先判断!empty($arr)以防未定义偏移警告。

直接用 [0] 取值,但要注意数组是否为空
PHP 索引数组(即数字键数组)第一个元素的键通常是 0,所以最常用也最直接的方式就是 $arr[0]。但实际写代码时,很多人忽略空数组导致的 Notice: Undefined offset: 0 错误。
常见错误现象:Undefined offset: 0 警告、返回 null 或意外值(比如在弱类型比较中被当成 false)。
- 先判断
!empty($arr)或count($arr) > 0再取$arr[0] - 用
reset($arr)更安全——它重置数组内部指针并返回第一个值,即使键不是0(比如数组是[5 => 'a', 6 => 'b'])也能取到首个元素 -
reset()不会改变原数组结构,也不依赖键名连续或从 0 开始
array_shift() 会修改原数组,慎用于只读场景
如果你需要“取出并移除”第一个元素,array_shift() 是标准做法;但如果只是想读取,它会破坏原数组,后续再遍历或使用就出错了。
- 用
array_shift($arr)后,$arr少了一个元素,所有数字键重新索引 - 如果只是取值不删,别用它——性能上也多一次拷贝和重索引
- 它对空数组返回
null,不会报错,但容易掩盖逻辑问题(比如你本以为数组非空)
PHP 7.4+ 可用 null 合并运算符简化写法
当你要给“取首元素”设个默认值时,?? 比一堆 isset() 判断更简洁,但要注意:它只判 null,不判空数组或 false。
立即学习“PHP免费学习笔记(深入)”;
$first = $arr[0] ?? 'default'; // 如果 $arr[0] 不存在(undefined),才用 default
这行代码等价于:
$first = isset($arr[0]) ? $arr[0] : 'default';
- 如果
$arr是空数组,$arr[0]未定义 → 触发??右侧 - 如果
$arr[0]存在但值为''、0、false,??仍会取它(因为不是null) - 真要处理“空值 + 未定义”,得组合用
!empty($arr) && $arr[0] ?: 'default'
注意关联数组混入时的“索引数组”假象
很多开发者以为 json_decode($json, true) 返回的是纯索引数组,其实只要 JSON 里键名是字符串(哪怕全是数字),PHP 就会生成关联数组,[0] 就失效了。
例如:json_decode('{"0":"a","1":"b"}', true) 得到的是关联数组,$arr[0] 是 undefined。
- 用
array_values($arr)[0]强制转成索引再取——但有性能开销(复制整个数组) - 更轻量的做法是
reset($arr),它对关联/索引数组都有效 - 检查类型可用
array_keys($arr) === range(0, count($arr)-1),但一般没必要,直接用reset()更稳
reset($arr) 是最不容易踩坑的选择,尤其当你不确定数组来源或结构是否规整时。很多人只记得 [0],却忘了 PHP 数组本质是有序哈希表,键序才是关键,而非键名本身。



















