比较数组中的数字和一系列值

时间:2018-11-04 16:53:02

标签: php arrays array-intersect

我想比较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个结果。

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

2 个答案:

答案 0 :(得分:0)

您可以使用array_intersect()(它使用您创建的函数来比较数组)来代替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 :(得分:0)

如我所见,您使它变得过于复杂。
只需循环数组并查看值即可。

$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