Сравните числа в массиве с диапазоном значений

Я хочу сравнить 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

Решение

Вместо того, чтобы использовать 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
)

(Обратите внимание, что мне пришлось изменить десятичную точку на . чтобы он работал в моей системе.)

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

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector