JavaScript 具有数组检查器函数 some
和 every
的概念,基本上检查条件是否适用于数组的至少一个或所有元素。
function isBiggerThan10(element, index, array) {
return element > 10;
}
[2, 5, 8, 1, 4].some(isBiggerThan10); // false
[12, 5, 8, 1, 4].some(isBiggerThan10); // true
是否有 php 的等效方法?
记住:编程不是魔法。不同的语言提供不同的 native 特性/功能,但这并不总是意味着当您发现您的语言“缺少”某些东西时您就会陷入困境。
接受自己实现这些事情的挑战会很有趣,也很有收获。
function array_any(callable $f, array $xs) {
foreach ($xs as $x)
if (call_user_func($f, $x) === true)
return true;
return false;
}
function array_all(callable $f, array $xs) {
foreach ($xs as $x)
if (call_user_func($f, $x) === false)
return false;
return true;
}
现在您可以像预期的那样使用它们了
echo (int) array_any(function($x) { return $x > 5; }, [1,2,3]); // 0
echo (int) array_any(function($x) { return $x > 5; }, [1,9,3]); // 1
echo (int) array_all(function($x) { return $x > 5; }, [5,6,7]); // 0
echo (int) array_all(function($x) { return $x > 5; }, [6,7,8]); // 1
@ggorlen 建议打开 truthy回调提供的值。 PHP 中的所有值都被视为 true,但以下情况除外:
<表类="s-表">
<头>
类型 |
值 |
<正文>
bool 值 |
错误 |
整数 |
0 |
float |
0.0 和 -0.0 |
字符串 |
"" |
数组 |
[], 空数组 |
空 |
空 |
对象 |
overloaded objects |
表>
注意 NAN
, 它被认为是 true
.
function array_any(callable $f, array $xs) {
foreach ($xs as $x)
if (call_user_func($f, $x) == true) // truthy
return true;
return false;
}
function array_all(callable $f, array $xs) {
foreach ($xs as $x)
if (call_user_func($f, $x) == false) // truthy
return false;
return true;
}