什么是PHP';s相当于JavaScript';s";array.every()“;?

什么是PHP';s相当于JavaScript';s";array.every()“;?,javascript,php,arrays,Javascript,Php,Arrays,我目前正在尝试将一些JavaScript移植到PHP。然而,我似乎找不到PHP与JavaScriptarray.every()函数的等价物。我找到了PHP的each()函数,但它似乎并不完全符合我的需要。使用带有提前返回的for循环 PHP没有执行与Javascript数组#every相同功能的本机函数。我认为您可以使用: 数组数组映射(可调用$callback,数组$array1[,数组$…])您可以使用函数。使用foreach(): 有关参考,请参阅: 注意foreach比使用arra

我目前正在尝试将一些JavaScript移植到PHP。然而,我似乎找不到PHP与JavaScript
array.every()
函数的等价物。我找到了PHP的
each()
函数,但它似乎并不完全符合我的需要。

使用带有提前返回的for循环

PHP没有执行与Javascript数组#every相同功能的本机函数。

我认为您可以使用:

数组数组映射(可调用$callback,数组$array1[,数组$…])您可以使用函数。

使用
foreach()

有关参考,请参阅:


注意
foreach
比使用
array\u reduce()
更好,因为一旦发现不符合规范的值,计算就会停止。

我很久以前写过这个原型,那是在互联网的黑暗时代,那时你永远不知道浏览器会做什么

是的,这比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;
  };
if(typeof Array.prototype.every!=“函数”)
{
Array.every=Array.prototype.every=function(_回调,_数组)
{
//假定失败
var _matches=false;
if(typeof _callBack=='function')
{
//使用数组对象数据或传入的数据
_数组=(\u数组===未定义)?此:\u数组;
//假定成功
_匹配=真;
var _len=此长度;
对于(变量i=0;\u i<\u len;\u i++)
{
//如果失败,请跳出
if(!\u回调(此[\u i]、\u i、\u数组))
{
_匹配=假;
打破
}
}
}
返回匹配项;
};

}Php数组\u每个函数


function array_every($array,$callback)
{

   return  !in_array(false,  array_map($callback,$array));
}


array_every([1,2,3],function($n){
     return $n>0;
});


此页上的答案不完整,并且会更改其他语言中
每个
(JS)/
所有
(Python)和类似函数的语义。映射和归约是不正确的,因为它们访问每个元素,而不考虑它们的真值

我们需要支持对任意谓词的回调,并在定位第一个谓词函数失败的元素时提供早期援助。之所以如此,是因为它提供了早期救助,但没有提供回调谓词

我们不妨边写边写一些/
任何

<?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)
一个简单的解决方案:

函数数组\u every(数组$array,可调用$fn){
返回(bool)数组的乘积(数组映射($fn,$array));
}
在线查看:


它不是优化的,只是一个概念证明。对于生产,我将使用
foreach
在第一个未通过测试的项目上返回
false

普通ol'对于循环,当测试条件为false时中断
每个
检查每个元素是否满足谓词?有时它被称为
all
。您在下面的评论中说您不太擅长PHP,但如果您擅长javascript,请查看代码并将其转换为PHP-也许?我肯定会查看。如果使用正确,这将返回一个布尔数组,它需要再次循环,以降低性能
map
变异数组。如果你有一个数组
$a=(1,2,3,4)
并且你使用map:
$b=array\u map(“is\u偶数,$a)
你原来的数组被改变:
/$a现在是(False,True,False,True)
@BrandonBrickyKerr这与
array\u map
的工作方式相反。它专门用于构建新阵列,而不是变异旧阵列。@BrandonBrickyKerr它不修改原始阵列,而是将其映射到新阵列。如果你给同一个变量分配一个新值,那就不同了。我相信这就是我需要的。:)这种方法也被设计成破坏性的,改变你的数组值。
array\u reduce
很好(我经常使用它),但是你应该记住它作为你的“当一切都失败”函数。它每次都会扫描整个数组,但是只要on callback返回false,它就应该停止运行。我对这个答案投了反对票,因为即使它是一个写得很好的解决方案,它的工作方式也与“every”不同。当遇到falsy值时,“every”会提前返回(不会调用进一步的回调)。这一个将所有回调,无论它是否在其中一个回调中遇到错误的值。也许不要考虑性能,我没有考虑它,只是展示如何使它自然正确……注意foreach比使用array_reduce()更好,因为一旦发现不符合规范的值,计算将停止。上面的注释这不仅是性能问题,如果传递给each的函数有副作用,它也会触发这些副作用,实际的each函数不会:)回答得很好,因为它(a)有一个完整的代码示例,并且(b)有早期的紧急援助,但它可以改进为代替硬编码谓词。我不知道你为什么要费心链接到
array\u reduce
文档——这个函数不适合这个目的(正如你所说!),而且你(正确地!)没有在代码中使用它。

function array_every($array,$callback)
{

   return  !in_array(false,  array_map($callback,$array));
}


array_every([1,2,3],function($n){
     return $n>0;
});

<?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)