我想比较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个结果。
如何比较两个数组中最小和最大范围之间的数字?
答案 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);