array_key_first()用于获取数组第一个键,不改变内部指针、不遍历、不复制,PHP 7.3+原生支持;低版本可用轻量fallback实现,返回null而非false,需用!== null判断。

array_key_first 用来取数组第一个键,但只支持 PHP 7.3+
这个函数就是干一件事:不重置数组指针、不遍历、不复制,直接拿 key。它比 key(array_keys($arr)) 快,也比 reset() + key() 更安全——后者会改变内部指针,可能影响后续 foreach 或 current() 的行为。
常见错误是 PHP 版本不够却硬用,报错:Call to undefined function array_key_first()。检查版本最简单的方法是运行 php -v 或查 PHP_VERSION_ID >= 70300。
空数组或非数组传入会返回 null,不是 false 或警告
array_key_first() 对空数组、null、字符串、对象都返回 null,不会触发 warning。这点和 key() 不同(后者对空数组返回 null 但对非数组会 warning)。
- 务必先判断是否为非空数组:
is_array($arr) && !empty($arr) - 别用
=== false做判断,因为null === false是false,逻辑会错 - 如果业务允许“无键可取”,直接用
$firstKey = array_key_first($arr);然后检查$firstKey !== null
替代方案:PHP 7.2 及以下怎么安全兼容
不能升级 PHP?别写 array_keys($arr)[0]——这会生成完整键数组,大数组浪费内存;也别依赖 reset() 后再 key(),它会移动指针。
立即学习“PHP免费学习笔记(深入)”;
推荐这个轻量写法:
function array_key_first_fallback($arr) {
if (!is_array($arr) || empty($arr)) {
return null;
}
foreach ($arr as $key => $_) {
return $key;
}
}
它只执行一次迭代,不修改原数组指针,兼容所有 PHP 5.3+,且语义清晰。
和 array_key_last 的行为对称,但别混用在引用数组上
如果你同时用 array_key_first() 和 array_key_last() 处理同一个数组,没问题。但注意:如果数组是引用(比如 &$arr),而你在中间改了键(如 unset($arr['a'])),两次调用结果就不可预测——因为它们各自独立读取当前状态,不缓存。
容易被忽略的一点是:关联数组的“第一个键”由插入顺序决定(PHP 7.4+ 保证有序),但数字索引数组如果键不连续(比如 [10 => 'x', 0 => 'y']),array_key_first() 返回的是 10,不是 0——它看的是内部哈希表遍历顺序,不是数值大小。



















