我目前正在尝试将一些JavaScript移植到PHP,但是,我似乎找不到与JavaScript等效的JavaScript“ array.every()”函数。我找到了PHP的“ each()”函数,但这似乎并不是我真正需要的。
ggo*_*len 11
此页面上的答案不完整,并且更改了every(JS) / all(Python) 以及其他语言中的类似函数的语义。映射和归约是不正确的,因为它们会访问每个元素,而不管其真值如何。
我们需要支持任意谓词的回调,并在找到第一个使谓词函数失败的元素时进行早期救援。这个答案很接近,因为它提供了早期救助,但未能提供回调谓词。
我们不妨一边写some/any一边写。
<?php
function array_every(array $arr, callable $predicate) {
foreach ($arr as $e) {
if (!call_user_func($predicate, $e)) {
return false;
}
}
return true;
}
function array_any(array $arr, callable $predicate) {
return !array_every($arr, fn($e) => !call_user_func($predicate, $e));
}
// sample predicate
function is_even(int $e) {
return $e % 2 === 0;
}
var_dump(array_every([0, 1, 2, 3], "is_even")); // => bool(false)
var_dump(array_every([0, 2], "is_even")); // => bool(true)
var_dump(array_any([1, 2], "is_even")); // => bool(true)
var_dump(array_any([1, 3], "is_even")); // => bool(false)
Run Code Online (Sandbox Code Playgroud)
使用foreach():
function allEven(array $values)
{
foreach ($values as $value) {
if (1 === $value % 2) {
return false;
}
}
return true;
}
$data = [
1,
42,
9000,
];
$allEven = allEven($data);
Run Code Online (Sandbox Code Playgroud)
参考:
注意 foreach比使用更好,array_reduce()因为一旦发现不满足规范的值,评估将停止。
| 归档时间: |
|
| 查看次数: |
2450 次 |
| 最近记录: |