有没有一个PHP相当于JavaScript的Array.prototype.some()函数

2022-08-30 12:26:48

在JavaScript中,我们可以做到:

function isBiggerThan10(element, index, array) {
  return element > 10;
}
[2, 5, 8, 1, 4].some(isBiggerThan10);  // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some

有没有 PHP 等同于 some() 函数?


答案 1

它不包括在内,但它们很容易创建。这使用SRFI-1名称,但可以重命名并:anyeverysomeall

function array_any(array $array, callable $fn) {
    foreach ($array as $value) {
        if($fn($value)) {
            return true;
        }
    }
    return false;
}

function array_every(array $array, callable $fn) {
    foreach ($array as $value) {
        if(!$fn($value)) {
            return false;
        }
    }
    return true;
}

答案 2

不,PHP 标准库中没有等效的短路。有许多非短路解决方案,其中可能最适合:array_reduce

var_dump(array_reduce([2, 5, 8, 1, 4], function ($isBigger, $num) {
    return $isBigger || $num > 10;
}));

可能值得实现你自己的 // 函数,或者使用一个提供函数式编程原语集合的库,例如 https://github.com/lstrojny/functional-phpsomeanyall