2015-09-17 5 views
6

Zum Beispiel, wenn Sie eine Reihe von Zahlen haben 5,4,3,2,1 und Sie möchten alle Zahlen von 3 am nächsten bestellt das Ergebnis wäre 3,2,4,5,1.Sortieren Array von der Entfernung zu einer Nummer

Ich habe versucht mit uasort und schrieb eine benutzerdefinierte Sortierfunktion, um die feste Ziffer (3 in diesem Fall), aber es hat nicht funktioniert. Ich schrieb die Funktion, um die feste Ziffer weg von den gegenwärtigen zwei Ziffern zu nehmen, die verglichen werden und abs an ihnen angewendet wurde.

Ich brauche einen Weg, wo ich vergleichen kann, welche Nummer zu vergleichen, wie nahe die aktuelle Nummer zugegriffen wird, und es an der richtigen Stelle im Array zu schlitzen.

Irgendwelche Ideen? Kann dies mit uasort erreicht werden?

+3

Would 4 nicht näher als 1? – Epodax

+0

Ich verstehe nicht Ihre "am nächsten zu 3", können Sie bitte ein wenig mehr darauf eingehen? – pacholik

+1

3,2,4,1,5 wäre das gleiche wie 3,4,2,5,1 sicher in einer 'Nähe' Reihenfolge – PurpleSmurph

Antwort

8

uasort() ist schon ein guter Anfang. Jetzt müssen Sie nur noch den Abstand zu 3 verwenden als Kriterien Array zu sortieren:

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

Code:

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

Große Lösung! – Evert