我怎么能做同样的事情呢?在Ruby中用PHP做

时间:2013-03-22 20:55:52

标签: php

在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);

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

2 个答案:

答案 0 :(得分:0)

你对功能编程非常热衷。 PHP不是一种函数式语言;至少那不是它的主要工作。

$array = array(1,2,3);
foreach ($array as $value) {
    if ($value > 2) return $value;
}

答案 1 :(得分: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; })) ...