Сортировка массива по расстоянию до числа
например, если у вас есть набор чисел 5,4,3,2,1
и вы хотите, чтобы все числа, упорядоченные по ближайшему к 3, результат был бы 3,2,4,5,1
.
Я пробовал использовать uasort
и написал пользовательскую функцию сортировки, чтобы принять фиксированную цифру(в данном случае 3), но это не сработало. Я написал функцию, чтобы убрать фиксированную цифру от текущих двух цифр, которые сравниваются и применяются abs
к ним.
мне нужен способ, где я могу сравнить, какое количество сравнения, как близко текущий номер доступа и слот его в нужном месте в массиве.
какие идеи? Может ли это быть достигнуто с помощью uasort
?
1 ответов
uasort()
уже хорошее начало. Теперь вам просто нужно использовать расстояние до 3 в качестве критерия для сортировки массива:
number | 0 | 1 | 2 | 3 | 4 | 5 | 6 | --------------------------------------- distance | 3 | 2 | 1 | 0 | 1 | 2 | 3 |
код:
uasort($arr, function($a, $b){
return abs(3-$a) - abs(3-$b);
});