php 8.5 没有 array_first 函数,该函数并非 php 原生函数,而是 laravel 等框架提供的封装;官方未引入,替代方案可用 array_key_first() 结合下标访问或手写循环实现。

PHP 8.5 没有 array_first 函数
直接说结论:array_first 并不存在于 PHP 8.5(也不存在于任何已发布的 PHP 版本)。PHP 官方至今未引入该函数,GitHub RFC、PHP Wiki 和 8.5 alpha/beta 发布日志里都查不到它。
你大概率是看到以下几种情况之一:
- 某第三方库(比如 Laravel 的
Illuminate\Support\Arr)提供了Arr::first(),被误认为是原生函数 - 混淆了其他语言(如 Laravel Collections、Lodash、Rust 的
first())的命名习惯 - 看到未合并的社区提案或实验性分支代码
Laravel 的 Arr::first() 怎么用(最常见误认来源)
如果你实际在 Laravel 项目里写了 array_first() 却没报错,那是因为 Laravel 自动别名了 Arr::first() —— 但这是框架层封装,不是 PHP 原生能力。
它的行为和参数逻辑是:
立即学习“PHP免费学习笔记(深入)”;
一个功能强大的B2B与B2C的购物平台,除了原本OSC功能外,增加更新的功能: 一、 取消了register_globals必须开启的限制 二、 將HTML程式碼与PHP程式碼完全分离,採用了smarty 樣板引擎 三、 每支档案includes所需函数与资料库连结,使的网页显示速度明显提升 四、 检视、购买商品群组权限设定 五、 十八岁以下禁购机制 六、 折价券购物抵扣机制 七、 礼券购物机制
-
Arr::first($array):返回第一个元素(不跳过null或false) -
Arr::first($array, $callback):遍历找第一个满足回调返回 truthy 的元素 -
Arr::first($array, $callback, $default):找不到时返回$default
示例:
<?php use Illuminate\Support\Arr; $data = [0 => 'a', 1 => null, 2 => 'c']; echo Arr::first($data); // 'a' echo Arr::first($data, fn($v) => $v !== null); // 'a' echo Arr::first($data, fn($v) => $v === 'c'); // 'c' echo Arr::first($data, fn($v) => $v === 'x', 'not found'); // 'not found' ?>
PHP 原生替代方案:手写安全又轻量
真要实现“取第一个非空/满足条件的元素”,没必要依赖框架。PHP 原生已有足够工具,关键是选对方式:
- 只要第一个元素?直接用
$array[array_key_first($array)](PHP 7.3+,注意:array_key_first()返回 key,不是 value) - 要跳过 falsy 值?用
array_filter($array)[0] ?? null(但会重索引,性能差,慎用于大数组) - 要带条件且保持键名?写个简单循环最可控,也最容易调试
推荐的手写函数(兼容 PHP 7.4+,无副作用):
<?php
function array_first(array $array, callable $callback = null, $default = null) {
foreach ($array as $key => $value) {
if ($callback === null || $callback($value, $key)) {
return $value;
}
}
return $default;
}
// 用法同 Laravel Arr::first,但无依赖
array_first([1, 0, '', 3], fn($v) => $v > 0); // 1
array_first(['a' => 0, 'b' => false, 'c' => 'ok'], fn($v) => $v); // 'ok'
?>
为什么别等 PHP 官方加 array_first?
这不是遗漏,而是设计取舍。PHP 数组函数体系偏向“明确语义 + 显式控制”:
-
current()需要先reset(),强调指针状态 -
array_key_first()/array_key_last()是 PHP 7.3 加的,只管 key,不碰 value - 带过滤逻辑的操作(如找第一个匹配项)被归为“业务逻辑”,官方倾向用
foreach或组合现有函数解决
真正容易被忽略的是:很多开发者在框架里用惯了 Arr::first(),换到纯 PHP 环境或 Swoole CLI 场景时,忘记加载 Arr 类或没意识到它是非原生的,结果跑出 Class 'Arr' not found 或 Call to undefined function array_first() —— 这类错误根本不会在 IDE 里标红,运行时才爆。










