php 8 没有内置 array_all 函数,但可用 array_reduce()(推荐)、array_filter()+count() 或自定义 foreach 函数实现,均支持空数组返回 true,其中自定义函数性能最优且天然短路。

PHP 8 本身**没有内置的 `array_all` 函数**。这个函数名常见于其他语言(如 JavaScript 的 `Array.prototype.every()` 或 Laravel 的集合方法),但在原生 PHP 中并不存在。不过,PHP 8 提供了更简洁、高效的方式来判断数组所有元素是否满足某个条件——主要依靠 内置的 `array_reduce()` 或 结合 `array_filter()` + 长度比较,而最推荐、最直观的是使用 `array_reduce()` 配合布尔逻辑。
用 `array_reduce()` 模拟 `array_all` 行为
这是最接近“函数式”风格、也最符合 PHP 8 推荐写法的方式:遍历一次,短路逻辑靠手动控制(注意:`array_reduce` 本身不短路,但可提前返回 false)。
示例:判断数组中所有数字是否都大于 10:
$arr = [12, 15, 20, 11];
$result = array_reduce($arr, function ($carry, $item) {
return $carry && ($item > 10);
}, true); // 初始值设为 true
var_dump($result); // true
说明:
- 初始值必须是 `true`(空数组也应返回 true,符合“全称量化”的数学语义);
- 每次迭代将当前结果($carry)与新条件($item > 10)做逻辑与(`&&`);
- 一旦某次结果为 `false`,后续所有 `&&` 运算结果恒为 `false`,无需额外中断(虽不真正短路,但效率影响极小)。
用 `array_filter()` + `count()` 判断(兼容性好,语义清晰)
适合对可读性要求高、或需兼容旧版本 PHP 的场景:
$arr = [12, 15, 20, 11]; $filtered = array_filter($arr, fn($x) => $x > 10); $result = count($filtered) === count($arr); var_dump($result); // true
说明:
- `array_filter()` 返回满足条件的元素组成的数组;
- 若过滤后长度等于原数组长度,说明每个元素都满足条件;
- 注意:该方式会遍历完整数组且生成新数组,内存和性能略逊于 `array_reduce` 方案,但逻辑一目了然。
封装成自己的 `array_all()` 函数(推荐复用)
为项目统一使用,建议封装一个工具函数:
function array_all(array $array, callable $callback): bool
{
foreach ($array as $item) {
if (!$callback($item)) {
return false;
}
}
return true;
}
// 使用示例
var_dump(array_all([2, 4, 6], fn($n) => $n % 2 === 0)); // true
var_dump(array_all([2, 3, 4], fn($n) => $n % 2 === 0)); // false
说明:
- 手动 `foreach` 实现,天然支持短路(遇到第一个 `false` 立即返回);
- 语义最贴近 `array_all`,代码简洁,性能最优;
- PHP 8 的箭头函数(`fn()`)让调用非常轻量。
注意事项与常见误区
使用时需留意以下几点:
- 空数组默认应返回 `true`(逻辑上“所有零个元素都满足条件”为真),上述三种方式均满足;
- 避免误用 `array_key_exists()` 或 `isset()` 判断条件——它们检测的是键/存在性,不是值的逻辑条件;
- 不要混淆 `array_all` 和 `in_array()`:后者查“是否存在”,前者查“是否全部满足”;
- Laravel 用户注意:Eloquent 集合有 `->every()` 方法,但它是 Collection 类的方法,不适用于原生数组。
不复杂但容易忽略:PHP 没有 `array_all`,但用一行 `array_reduce` 或几行自定义函数就能完美替代,关键是选对语义清晰、性能可控的方式。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











