【问题标题】:Check if two arrays are equal key value with same name检查两个数组是否具有相同名称的相同键值
【发布时间】:2017-07-31 18:08:19
【问题描述】:

我有两个数组:

$arr1 = array(
    1 => 250,
    2 => 325,
    3 => 741,
    4 => 690
);

$arr2 = array(
    1 => 110,
    2 => 740,
    3 => 1200,
    4 => 500
);

我想检查是否所有$arr2 值都小于$arr1

现在有 2 个键 [1] + [4] 小于 $arr1[1] + [4]

没有 foreach 循环,如果来自 $arr2 的任何键小于来自 $arr1 的相同键,我想返回 true 或 false。

【问题讨论】:

  • 抱歉您的问题不清楚。想尝试。预期的输出是什么?
  • 数组总是只有4个键吗?
  • 您的意思是$arr2 中的任何键都小于$arr1 中的相同键吗?
  • 是的,总是只有 4 个键
  • 不要惊慌是的,你是对的

标签: php compare


【解决方案1】:

这是一种方法。

$result = (bool) array_filter(array_map(function($a, $b){
    return $b < $a;
}, $arr1, $arr2));

内部array_map根据$arr1$arr2对应值的比较返回truefalse。然后外部array_filter 将结果减少为仅包含true 值。如果$arr2 中的所有值都大于或等于相应的$arr1 值(因为array_filter 将返回一个空数组),则将结果转换为布尔值将产生true,如果其中任何一个是false少。

请记住,对于这样的事情,避免 foreach 循环不是更有效。 array_maparray_filter 函数都将迭代给定的整个数组。如果您改用 foreach,您可以在找到满足您要查找的条件的元素后立即跳出循环,在这种情况下,这将是 foreach 循环的第一次迭代。

【讨论】:

    【解决方案2】:

    这是一个不使用 foreach() 的示例,但我们大多数人会使用迭代器来处理数组元素。你也可以使用 for() 或 while() 循环。

    <?php // demo/temp_samer.php
    /**
     * Compare array elements
     *
     * https://stackoverflow.com/questions/45422576/check-if-two-arrays-are-equal-key-value-with-same-name
     */
    error_reporting(E_ALL);
    echo '<pre>';
    
    
    $arr1=array('1'=>250,'2'=>325,'3'=>741,'4'=>690);
    $arr2=array('1'=>110,'2'=>740,'3'=>1200,'4'=>500);
    
    if ($arr2[1] < $arr1[1]) echo PHP_EOL . "KEY 1 IS LOWER IN THE SECOND ARRAY";
    if ($arr2[2] < $arr1[2]) echo PHP_EOL . "KEY 2 IS LOWER IN THE SECOND ARRAY";
    if ($arr2[3] < $arr1[3]) echo PHP_EOL . "KEY 3 IS LOWER IN THE SECOND ARRAY";
    if ($arr2[4] < $arr1[4]) echo PHP_EOL . "KEY 4 IS LOWER IN THE SECOND ARRAY";

    【讨论】:

      【解决方案3】:

      这显示了一种思考问题的方式。 https://iconoun.com/demo/temp_samer.php

      <?php // demo/temp_samer.php
      /**
       * Compare array elements
       *
       * https://stackoverflow.com/questions/45422576/check-if-two-arrays-are-equal-key-value-with-same-name
       */
      error_reporting(E_ALL);
      echo '<pre>';
      
      
      $arr1=array('1'=>250,'2'=>325,'3'=>741,'4'=>690);
      $arr2=array('1'=>110,'2'=>740,'3'=>1200,'4'=>500);
      
      foreach ($arr2 as $key => $value)
      {
          if ($value < $arr1[$key]) echo PHP_EOL . "KEY $key IS LOWER IN THE SECOND ARRAY";
      }

      【讨论】:

      • 为什么不想使用foreach()?这是匹配数组键的一种非常方便的方法,因此我们可以测试值。
      • Op 在“没有 foreach 循环”的问题中说得很清楚,所以这不能回答这个问题。
      • 哦,我没看到。是经过编辑还是我只是缺少一个脑细胞?
      • 它最初就在那里,在@GrumpyCrouton 编辑后变得更加清晰。但是,你在这里和我们一起回答 PHP 问题,所以无论如何,脑细胞肯定是一个问题。
      • @Don'tPanic 只是不要对丢失的脑细胞感到恐慌;)
      猜你喜欢
      • 2014-02-03
      • 2019-07-12
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      相关资源
      最近更新 更多