我正在编写一个名为
然而,有时候我们只想检查数组是否包含所有
添加这个后,调用
all
的函数,用于检查数组$arr
中的所有元素,并返回单个boolean
值(基于$f
的返回值)。使用自定义函数时工作正常(请参见将$gte0
传递给all
的代码)。然而,有时候我们只想检查数组是否包含所有
true
值:all(true, $arr)
不起作用,因为true
被传递为boolean
(并且true
不是函数名)。PHP是否具有本地的类似于true()
的功能?function all($f, array $arr)
{
return empty($arr) ? false : array_reduce($arr, function($v1, $v2) use ($f) {
return $f($v1) && $f($v2);
}, true);
}
$test = array(1, 6, 2);
$gte0 = function($v) { return $v >= 0; }
var_dump(all($gte0, $test)); // True
$test = array(true, true, false);
$id = function($v) { return $v; } // <-- this is what i would avoid
var_dump(all($id, $test)); // False
all(true, $test); // NOT WORKING because true is passed as boolean
all('true', $test); // NOT WORKING because true is not a function
编辑: 另一种方法是检查 all
函数中的 $f
:
$f = is_bool($f) ? ($f ? function($v) { return $v; }
: function($v) { return !$v; } ): $f;
添加这个后,调用
true
的all
函数将是完全正常的。