2015-09-17 17 views
6

Na przykład, jeśli masz zestaw liczb 5,4,3,2,1 i chcesz, aby wszystkie liczby uporządkowane przez najbliższe 3, wynik byłby następujący: 3,2,4,5,1.Sortuj tablicę według odległości do numeru

Próbowałem użyć uasort i napisałem funkcję sortowania niestandardowego, aby pobrać stałą cyfrę (w tym przypadku 3), ale nie działało. Napisałem tę funkcję, aby usunąć stałą cyfrę z obecnie porównywanych dwóch cyfr i zastosować do nich abs.

Potrzebuję sposobu, w jaki mogę porównać, która liczba porównywania, jak blisko jest bieżący numer jest dostępny i umieścić go we właściwym miejscu w tablicy.

Wszelkie pomysły? Czy można to osiągnąć za pomocą uasort?

+3

Byłoby 4 nie znajdować się bliżej niż 1? – Epodax

+0

Nie rozumiem twojego "najbliżej 3", czy mógłbyś to jeszcze bardziej rozwinąć? – pacholik

+1

3,2,4,1,5 będzie taki sam jak 3,4,2,5,1 na pewno w zamówieniu "bliskości" – PurpleSmurph

Odpowiedz

8

uasort() to już dobry początek. Teraz po prostu trzeba użyć odległość do 3 jako kryteria sortowania tablicy:

number | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 
--------------------------------------- 
distance | 3 | 2 | 1 | 0 | 1 | 2 | 3 | 

Kod:

uasort($arr, function($a, $b){ 
    return abs(3-$a) - abs(3-$b); 
}); 
+1

Świetne rozwiązanie! – Evert