@WebGuardMan

Как найти (подобрать) максимально близкий ключ массива?

Имеется массив цена - айди товара, пример
array (
1=> '215070121',
5=> '215001216',
12=> '215050121',
21=> '215010127',
50=> '215080122'
);

нужно взять с массива айди товара максимально подходящий по цене, например при цене $price = 10;
должен быть выбрать элемент с ключем 12 и значением 215050121
цена - только целое число
Как правильно сформировать код?
  • Вопрос задан
  • 322 просмотра
Решения вопроса 3
Методом половинного деления, а затем выбором ближайшего из левого и правого соседа, если точного совпадения не найдено.
Ответ написан
Комментировать
qork
@qork
{ background: #F00B42 }
stackoverflow.com/questions/5464919/php-nearest-va...
только с поправкой на поиск среди ключей
function getClosest($search, $arr) {
   $closest = null;
   foreach ($arr as $price => $id) {
      if ($closest === null || abs($search - $closest) > abs($price - $search)) {
         $closest = $price;
      }
   }
   return $arr[$closest];
}

ideone.com/ru6JwA
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1. Вначале нужно поместить искомое значение в массив ДО СОРТИРОВКИ! и затем отсортировать массив по цене (например, через половинное деление). Возможно, что он у Вас уже сортируется и нужно лишь пометить помещаемое значение отрицательным ID-шником товара.
2. Затем найти через абсолютную разницу нужного соседа выше (перед) или ниже (за ним)

Перебирать целиком ВЕСЬ массив - НЕ НУЖНО!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
27 апр. 2024, в 19:58
2500 руб./в час
27 апр. 2024, в 19:48
10000 руб./за проект