У меня есть ассоциативный массив в php. ключи – целые числа. как найти ближайший ключ для любого целочисленного ввода?
простой, но грубой метод:
$distance = 1000000; // initialize distance as "far away" foreach ($array as $idx => $value) if (abs ($idx - $target_index) < $distance) { $distance = abs ($idx - $target_index); $best_idx = $idx; }
Если клавиши массива в порядке, вы можете использовать более эффективный алгоритм (который может или не может заметно различать в зависимости от того, для чего это и насколько велики массивы):
$arr = [2 => 'a', 4 => 'b', 7 => 'c']; $input = 5; if (isset($arr[$input])) { return $input; } foreach ($arr as $key => $value) { if ($key > $input) { if (prev($arr) === FALSE) { // If the input is smaller than the first key return $key; } $prevKey = key($arr); if (abs($key - $input) < abs($prevKey - $input)) { return $key; } else { return $prevKey; } }