1

在 Ruby 中,any?获取一个块并检查给定集合是否具有满足该块的值,如下所示:

[1, 2, 3].any? {|v| v > 2} # true

有没有办法在 PHP 中做到这一点?我目前的想法是使用array_reduce()

array_reduce(array(1, 2, 3), function($acc, $val) {
    return $acc || ($val > 2);
}, false);

但它会迭代数组中的所有元素,所以我猜它不如“任何?” 在红宝石。一旦在 PHP 中找到预期值,如何返回布尔值?

4

2 回答 2

0

你对函数式编程太热衷了。PHP 不是函数式语言;至少这不是它的主要工作。

$array = array(1,2,3);
foreach ($array as $value) {
    if ($value > 2) return $value;
}
于 2013-03-22T21:00:18.693 回答
0
function any(array $array, callable $test) {
    foreach ($array as $value) {
        if ($test($value)) {
            return true;
        }
    }
    return false;
}

您可以改用简单的array_filter,但它每次都会迭代整个数组:

if (array_filter($array, function ($v) { return $v > 2; })) ...
于 2013-03-22T21:00:26.320 回答