У меня есть массив, например (это может быть что угодно, но это уже заказано):PHP Ближайший младший номер в массиве
array(1,7, 12, 18, 25);
Мне нужно найти то, что число является самым близким к этому массиву.
Принимая выше массив:
$needle = 11;
Количество в массиве я хочу, чтобы получить это 7
. . Ближайшее число до 11
должно быть 12
, но я не хочу ближайшего номера, я хочу младшего ближайшего номера, если это имеет смысл.
Еще примеры:
- Ввод
26
извлеченный номер должен быть25
- Ввод
1
извлеченный номер должен быть1
- Ввод
6
извлеченный номер должен быть1
- Ввод
7
извлеченный номер должен быть7
- Ввод
16
извлеченный номер должен быть12
Я нашел хорошую функцию, но это только получить ближайший номер, а не второстепенный ближайший номер:
function closestnumber($number, $candidates) {
for($i = 0; $i != sizeof($candidates); $i++) {
$results[$i][0] = abs($candidates[$i] - $number);
$results[$i][1] = $i;
}
sort($results);
$end_result['closest'] = $candidates[$results[0][1]];
$end_result['difference'] = $results[0][0];
return $end_result;
}
$closest = closestnumber(8,array(1,7, 12, 18, 25));
echo "Closest: ".$closest['closest']."<br>";
echo "Difference: ".$closest['difference'];
Спасибо заранее.
Хорошее общее решение. '$ last = null' может быть более подходящим инициализатором. '$ key' не используется или не требуется. Бинарный поиск может быть более подходящим, если массив большой. – Matthew
Обратите внимание, что для этого необходимо, чтобы значения сортировались в порядке возрастания. – Gumbo
Хорошие точки, отредактированные. @Gumbo: Он утверждает, что массив уже упорядочен. – Andre