ZetCode

PHP array_any 函数

最后修改于 2025 年 3 月 13 日

PHP array_any 函数检查数组中的任何元素是否通过回调函数实现的测试。它对于部分验证很有用。

基本定义

array_any 函数测试是否有任何元素满足某个条件。如果至少有一个元素通过测试,它将返回 true。

语法:array_any(array $array, callable $callback): bool。回调函数应为通过的元素返回 true。空数组返回 false。

基本 array_any 示例

这显示了简单的验证,检查数组中的任何元素是否为正数。

basic_array_any.php
<?php

declare(strict_types=1);

function array_any(array $array, callable $callback): bool {
    foreach ($array as $element) {
        if ($callback($element)) {
            return true;
        }
    }
    return false;
}

$numbers = [-2, -1, 0, 1];
$hasPositive = array_any($numbers, fn($n): bool => $n > 0);

echo $hasPositive ? 'Has positive' : 'No positives'; 

这检查任何数字是否为正数。回调函数测试每个元素,并且 array_any 返回 true,因为 1 通过了测试。

检查特定值

验证数组中的任何字符串是否与特定值匹配。

specific_values.php
<?php

declare(strict_types=1);

$colors = ["red", "green", "blue"];
$hasBlue = array_any($colors, fn($color): bool => $color === "blue");

echo $hasBlue ? 'Has blue' : 'No blue'; 

这检查数组中是否存在“blue”。回调函数比较每个元素,在找到匹配值时返回 true。

对象属性检查

检查数组中的任何对象是否具有满足特定标准的属性。

object_property_check.php
<?php

declare(strict_types=1);

class User {
    public function __construct(
        public string $name,
        public bool $isAdmin
    ) {}
}

$users = [
    new User("Alice", false),
    new User("Bob", false),
    new User("Charlie", true)
];

$hasAdmin = array_any($users, fn(User $u): bool => $u->isAdmin);

echo $hasAdmin ? 'Has admin' : 'No admins'; 

这验证任何用户是否为管理员。回调函数检查每个对象的 isAdmin 属性,在找到管理员用户时返回 true。

空数组行为

array_any 对空数组返回 false,这是合乎逻辑的。

empty_array.php
<?php

declare(strict_types=1);

$emptyArray = [];
$result = array_any($emptyArray, fn($x): bool => $x > 10);

echo $result ? 'Some pass' : 'None pass'; 

由于没有要检查的元素,array_any 返回 false。这遵循了数学逻辑,即对空集的存在的量词为 false。

提前终止

array_any 为了效率,在第一次成功后停止检查。

early_termination.php
<?php

declare(strict_types=1);

$numbers = [1, 3, 5, 8, 9];
$hasEven = array_any($numbers, function($n): bool {
    echo "Checking $n\n";
    return $n % 2 === 0;
});

echo $hasEven ? 'Has even' : 'No evens'; 

该函数在第一个偶数 (8) 处停止。您只会看到 1、3、5 和 8 的输出,这证明了短路行为。

最佳实践

来源

PHP Array Filter 文档(相关功能)

本教程涵盖了 PHP array_any 模式,并通过实际示例展示了其在数组验证场景中的用法。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PHP 数组函数