Сравните числа в массиве с диапазоном значений - PullRequest
0 голосов
/ 04 ноября 2018

хочу сравнить 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 голосов
/ 04 ноября 2018

Насколько я понимаю, вы это слишком усложняете.
Просто зациклите массив и посмотрите на значения.

$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 голосов
/ 04 ноября 2018

Вместо использования 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
)

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

...