【问题标题】:Compare numbers in an array with a range of values将数组中的数字与一系列值进行比较
【发布时间】:2019-04-08 03:30:48
【问题描述】:

我想比较 2 个数组。但在数字的情况下,我想在指定的范围内进行比较。

例如我们去比较 3 个变量: 性别、颜色眼睛和身高

在高度的情况下,例如,如果人们有 1,70 的高度,而在其他数组中我有 1,75,我没有得到结果,因为它只显示与该数据的完全匹配。

我想在另一个数组在 1,70 到 1,79 范围内时显示结果

<?php
$arra_1=array("woman","blue","1,70");
$array_2=array("woman","brown","1,71");
$result=array_intersect($array_1,$array_2);
print_r($result);
?>

array_intersect() 的这些条件下,它只显示 1 个结果,因为唯一的共同值是“女人”,但如果我可以比较 1.70 到 1.80 之间的高度范围,它会给我 2 个结果.

如何比较两个数组中的最小和最大范围的数字?

【问题讨论】:

    标签: php arrays array-intersect


    【解决方案1】:

    在我看来,您过于复杂了。
    只需循环数组并查看值。

    $heightspan = substr($array_1[2],0,3);
    $sex = $array_1[0];
    
    foreach($array_2 as $arr){
        if($arr[0] == $sex && substr($arr[2],0,3) == $heightspan){
            $result[] = $arr;
        }
    }
    print_r($result);
    

    https://3v4l.org/Qg3Uh

    【讨论】:

      【解决方案2】:

      您可以使用array_uintersect(),而不是使用仅检查相等性的array_uintersect(),它使用您创建的函数来比较数组。如果值被认为相等,它应该返回零。

      function loose_comp($a, $b) {
          // text will be compared as usual
          if (!is_numeric($a) || !is_numeric($b)) {
              return $a === $b;
          }
          // I check for a difference of ±10%
          // you can do whatever check you want
          if ($a <= $b * 1.1 && $a >= $b * 0.9) {
              return 0;
          }
          return 1;
      }
      
      $array_1 = ["woman","blue","1,70"];
      $array_2 = ["woman","brown","1,71"];
      $result = array_uintersect($array_1, $array_2, "loose_comp");
      print_r($result);
      

      这给了我这个输出:

      Array
      (
          [0] => woman
          [2] => 1.70
      )
      

      (请注意,我必须将小数点更改为 . 才能在我的系统上运行。)

      【讨论】:

      • 它还需要用 1,71 显示数据,因为它在同一范围内,这就是我想要的数字
      猜你喜欢
      • 2020-02-22
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      相关资源
      最近更新 更多