我目前正在尝试将一些JavaScript移植到PHP,但是,我似乎无法找到PHP等同于JavaScript" array.every()&#34 ;功能。我找到了PHP"每个()"功能,但它似乎并不是我所需要的。
答案 0 :(得分:3)
使用早期返回的for循环。
PHP没有与Javascript的数组#very执行相同功能的本机函数。
答案 1 :(得分:1)
您可以使用array_reduce功能。
答案 2 :(得分:1)
使用foreach()
:
function allEven(array $values)
{
foreach ($values as $value) {
if (1 === $value % 2) {
return false;
}
}
return true;
}
$data = [
1,
42,
9000,
];
$allEven = allEven($data);
供参考,见:
注意 foreach
优于使用array_reduce()
,因为一旦找到不符合规范的值,评估就会停止。
答案 3 :(得分:1)
Php array_every函数
+-------+-----+--------------------+-----------------------------+
| name | age | favourite category | value of favourite category |
+-------+-----+--------------------+-----------------------------+
| john | 25 | color | yellow |
| john | 25 | food | apple |
| john | 25 | city | munich |
| james | 24 | color | red |
| james | 24 | food | onion |
| james | 24 | city | melbourne |
+-------+-----+--------------------+-----------------------------+
答案 4 :(得分:1)
此页面上的答案不完整,并且更改了 every
(JS) / all
(Python) 的语义以及来自其他语言的类似函数。映射和归约是不正确的,因为它们会访问每个元素而不管它们的真值。
我们需要一些支持任意谓词回调的东西,并在定位第一个使谓词函数失败的元素时具有早期救助功能。 This answer 接近,因为它提供早期救助但未能提供回调谓词。
我们不妨在编写时编写 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, function ($e) use ($predicate) {
return !call_user_func($predicate, $e);
});
}
// sample predicate
function is_even($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)
答案 5 :(得分:1)
一个简单的解决方案:
function array_every(array $array, callable $fn) {
return (bool)array_product(array_map($fn, $array));
}
它没有经过优化,只是一个概念证明。对于生产,我将使用 foreach
返回 false
未通过测试的第一个项目。
答案 6 :(得分:0)
我在很久以前写过这个原型,回到互联网的黑暗时代,当时你从来不知道浏览器会做什么。
是的,这比jQuery早了十年。
它在JS中。在转换它时,使用它作为学习PHP的一个很好的练习。
对你来说有点晚,但我希望它有所帮助。
if ( typeof Array.prototype.every !== 'function' )
{
Array.every = Array.prototype.every = function( _callBack, _array )
{
// Assume failure
var _matches = false;
if ( typeof _callBack === 'function' )
{
// Use ARRAY Object data or passed in data
_array = (_array === undefined) ? this : _array;
// Assume success
_matches = true;
var _len = this.length;
for ( var _i = 0; _i < _len; _i++ )
{
// If this failed, bounce out
if ( ! _callBack(this[_i], _i, _array ) )
{
_matches = false;
break;
}
}
}
return _matches;
};
}
答案 7 :(得分:-1)
我认为您可以使用:http://php.net/manual/ru/function.array-map.php。
array array_map ( callable $callback , array $array1 [, array $... ] )