Поиск массива в массиве (с числами с плавающей запятой) с заданной ошибкой

0

Я пытаюсь найти конкретный массив в другой. Я искал функции PHP, такие как array_intersect(), но это мне не очень нужно.

Вот моя проблема: у меня есть $array_1 = [5.3,5.0,6.7] и $ array_2 = [5.0, 5.2,6.5,7.5,8.25]. Мне нужно найти числа $ array_1 в $ array_2 с близкими значениями, и они должны быть последовательными.

В этом примере ошибка результата должна быть меньше 0,5. Итак, мне нужно: $array_1 найдено в $array_2 потому что значения массива 1 найдены в массиве 2 с заданной ошибкой.

  • 5,3 - 5,0 = 0,3 (<0,5)
  • 5,0 - 5,2 = 0,2 (<0,5)
  • 6,7 - 6,5 = 0,2 (<0,5)

Есть ли функция PHP, которая будет искать $ array_1 в $ array_2 с заданным eps. ошибка? Мне не удалось найти его на google.com

Надеюсь, моя идея и проблемы ясны для всех, кто мог бы помочь.

Заранее большое спасибо.

Теги:
arrays

1 ответ

1

Я не уверен в вашей конечной цели, но этот код может помочь вам начать:

    $array_1 = array (5.3,5.0,6.7);         #search for this
$array_2 = array (3.0, 4.4, 5.0, 5.2,6.5,7.5,8.25, 5.0, 5.2, 8.2, 5.0, 4.2, 4.1, 5.3,5.0,6.7);  #inside this

$err = 0.5;

$matchkeys= array();

$i = 0;
$tmp_match = '';
foreach ($array_2 as $k => $v) {        #crawl through array_2

        if (abs($v - $array_1[$i]) < $err) {
                echo "match at $k for $i \n";
                if ($i==0) {$tmp_match = $k;}
                $i++;           #if array one matches, then check next array 1 against next array 2
                if ($i == count($array_1)) {    #done matching array_1 ?
                        $matchkeys[] = $tmp_match;      //push first index value of compelte match to array
                        $tmp_match = '';
                        $i = 0;
                }
        }
        else {
                $tmp_match = '';
                $i=0;           #otherwise start over
        }
}

echo "\n\n found complete matches in array_2 at index: \n";
print_r($matchkeys);
  • 0
    Спасибо! вчера вечером я думал о чем-то похожем. Но мне не хватило времени.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню