Сортировка массива по расстоянию до числа

например, если у вас есть набор чисел 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);
});