gpt4 book ai didi

PHP 有 true() 函数吗?

转载 作者:可可西里 更新时间:2023-11-01 00:10:36 24 4
gpt4 key购买 nike

我正在编写一个名为 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 就完全没问题了。

最佳答案

intval 可能会满足您的要求(特别是因为数组在您的示例中仅包含整数):

var_dump(all('intval', $test)); // False

但是,many types to integer conversions are undefined in PHP 和 float 会向零舍入,因此这可能不是您想要的。

更正确的“函数”应该是 bool 值 true: empty 的反义词,但它不是函数,所以你不能使用它(并反转返回值):

var_dump(!all('empty', $test)); // Does not work!

并且PHP中没有boolval之类的函数,需要的话自己写吧;)

此外,您的all 功能可以优化。迭代时,如果当前结果已经是FALSE,则最终结果将始终是FALSE。无论如何都不需要调用 $f() n * 2 次:

function all($f, array $arr)
{
$result = (bool) $arr;
foreach($arr as $v) if (!$f($v)) return FALSE;
return $result;
}

编辑 knittl is right 指向array_filter,它转换为没有函数的 bool 值,这看起来很酷,因为没有“boolval”函数:

function all($f, array $arr)
{
return ($c = count($arr))
&& ($f ? $arr = array_map($f, $arr) : 1)
&& $c === count(array_filter($arr));
}

var_dump(all(0, $test)); // False

由于 array_filter,使第一个函数参数可选将对每个数组元素进行适当的 bool 转换。

关于PHP 有 true() 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8315257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com