Я хочу сравнить 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 результата.
Как я могу сравнить числа в двух массивах между минимальным и максимальным диапазонами?
Вместо того, чтобы использовать 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
)
(Обратите внимание, что мне пришлось изменить десятичную точку на .
чтобы он работал в моей системе.)
На мой взгляд, вы слишком усложняете это.
Просто зациклите массив и посмотрите на значения.
$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);