什么是PHP相当于JavaScript" array.every()"?

时间:2017-07-18 02:49:40

标签: javascript php

我目前正在尝试将一些JavaScript移植到PHP,但是,我似乎无法找到PHP等同于JavaScript" array.every()&#34 ;功能。我找到了PHP"每个()"功能,但它似乎并不是我所需要的。

8 个答案:

答案 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));
}

在线查看:https://3v4l.org/1D1Ao

它没有经过优化,只是一个概念证明。对于生产,我将使用 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 $... ] )