最可靠方法是用 reset() 或 array_key_first()。reset($arr) 重置指针并返回首元素值(空数组返回 false);php 7.3+ 推荐 array_key_first() 获取首键再取值,性能好、无副作用、不干扰遍历。

用 reset() 获取第一个元素最可靠
PHP 数组没有内置的“首元素”索引常量,0 不一定存在(比如键为字符串或从 5 开始的关联数组)。直接用 $arr[0] 很容易返回 undefined index 或错判。正确做法是重置内部指针并读取:reset($arr) 会把指针移到第一个元素,并返回该元素值(失败返回 false)。
常见错误现象:对 ['a' => 1, 'b' => 2] 或 [2 => 'x', 3 => 'y'] 直接访问 $arr[0],结果是 null 或触发 notice。
-
reset()不修改原数组,只操作内部指针 - 若数组为空,
reset()返回false,需配合is_null()或严格比较判断 - 搭配
key()和current()可同时拿到首元素的键和值
用 array_key_first()(PHP 7.3+)最简洁
如果确定运行环境 ≥ PHP 7.3,array_key_first() 是专为此设计的函数:它不移动指针,只返回第一个键名;再用这个键去取值即可。性能好、语义清晰、无副作用。
使用场景:需要快速判断首元素是否存在、类型或值,且不希望影响后续遍历逻辑(比如之后还要用 foreach)。
$firstKey = array_key_first($arr); $firstVal = $arr[$firstKey] ?? null;- 注意:
array_key_first()对空数组返回null,不能直接当数组下标用,要先判空 - 不兼容低版本 PHP,硬切到 7.3+ 前需加版本检测或降级方案
别用 array_values()[0] 做判断
看似直观,实则低效又危险。每次调用 array_values() 都会重建索引数组,时间复杂度 O(n),内存开销翻倍;更严重的是,它会丢弃原始键,破坏数据语义——比如你本想检查第一个键是否为 'id',这招就完全失效。
错误示例:$first = array_values($arr)[0]; —— 在大数组或循环中频繁使用会导致明显性能下降。
- 仅在明确需要「重新索引后的首个值」且数组很小时才可容忍
- 永远不要在条件判断中嵌套
array_values(),如if (array_values($arr)[0] === 'x') - 替代方案:用
reset()+key()获取原始键,或array_key_first()+ 显式取值
判断“第一个元素是否满足某条件”时的典型写法
实际开发中往往不是单纯取值,而是做条件判断,比如“首元素是否为非空字符串”或“首键是否等于 'status'”。这时推荐组合使用 array_key_first()(或 reset())与三元/空合并操作符。
if (($firstKey = array_key_first($arr)) !== null && $arr[$firstKey] === 'active') {
// 处理首元素值为 'active' 的情况
}
或者兼容旧版:
$firstVal = reset($arr);
if ($firstVal !== false && is_string($firstVal) && !empty($firstVal)) {
// 首元素是非空字符串
}
- 始终先判断数组是否为空,再取首元素,避免 warning
- 用
!== null或!== false而非!=,防止类型隐式转换误判 - 如果后续还需遍历整个数组,优先选
array_key_first(),避免reset()干扰foreach指针
[0] 的假设都会在某个上线时刻崩塌。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











