PHP usort Sortierung Array Der Sortierwert ist für alle gleich

7

Ich benutze usort, um ein Array mit einem assoziativen Array innerhalb jedes Elements zu sortieren.

Wenn alle Werte, die ich im Array sortiere, gleich sind, dann ändert sich immer noch die Position der Elemente im Array. Gibt es eine Möglichkeit, dies zu verhindern?

Zum Beispiel:

%Vor%

Kann zu diesem geändert werden:

%Vor%

Dies ist die Sortierfunktion:

%Vor%

Ich habe überprüft, dass die Funktion weightSortImplementation immer 0 zurückgibt und zeigt, dass sie gleich sind. Also, warum wird das Array immer noch neu angeordnet?

    
Chris 28.08.2012, 16:24
quelle

2 Antworten

11

Aha, ein Fall für die Schwartzsche Transformation .

Es besteht im Wesentlichen aus drei Schritten:

  1. dekorieren; Sie drehen jeden Wert in ein Array mit dem Wert als erstes Element und dem Schlüssel / Index als zweiten
  2. sort (wie normal)
  3. undecorate; Sie kehren Schritt 1 um

Hier ist es (ich habe es an Ihren speziellen Anwendungsfall angepasst):

%Vor%

Der Trick ist in der folgenden Behauptung:

%Vor%

Dies ist die richtige Reihenfolge Ihres Arrays. Und, keine Rekursion erforderlich:)

    
Ja͢ck 28.08.2012, 16:52
quelle
9

In der Dokumentation :

  

Wenn zwei Mitglieder als gleich vergleichen, ist ihre relative Reihenfolge im sortierten Array undefiniert.

Sie können diese Funktion verwenden [source] , die die Reihenfolge bei zwei Elementen erhält gleich sein:

%Vor%     
Tim Cooper 28.08.2012 16:25
quelle

Tags und Links