Aktueller Standort: Startseite> Neueste Artikel> Was sind die spezifischen Methoden zur Implementierung der Mehrkonditionssorten, wenn Arsort in Kombination mit KSORT verwendet wird?

Was sind die spezifischen Methoden zur Implementierung der Mehrkonditionssorten, wenn Arsort in Kombination mit KSORT verwendet wird?

gitbox 2025-08-12

In PHP ist die Array-Sortierung ein häufiger Betrieb in der Datenverarbeitung, insbesondere wenn es sich um mehrdimensionale Arrays oder Szenarien handelt, in denen eine multi-konditionelle Sortierung erforderlich ist, ist es besonders wichtig, die entsprechende Sortierfunktion auszuwählen. arsort () und ksort () sind zwei Funktionen, die häufig in Kombination verwendet werden. Durch ihre Kombination können die Werte und Tasten von Arrays ordentlich verwaltet werden. In diesem Artikel wird detailliert erläutert, wie diese beiden Funktionen in Kombination verwendet werden, um in Kombination eine multi-konditionelle Sortierung zu erreichen.

1. Grundfunktionen von Arsort und Ksort

  • Arsort () : Sortieren Sie das Array in absteigender Reihenfolge, behalten Sie die Schlüsselnamen bei und sortieren Sie nach "Wert".

  • KSORT () : Sortieren Sie das Array in aufsteigender Reihenfolge nach "Schlüssel" und behalten Sie den Schlüsselwert bei.

Obwohl diese beiden Funktionen im Wesentlichen "Werte" bzw. "Schlüsseln" sortieren, können sie in einigen Szenarien zusammen verwendet werden, um eine flexiblere Sortierlogik mit mehreren Konditions zu erzielen.

2. Beispiele für Multi-Konditions-Sortieranforderungen

Angenommen, es gibt ein Array wie folgt, um die Score -Datensätze mehrerer Benutzer darzustellen:

 <span><span><span class="hljs-variable">$users</span></span><span> = [
    </span><span><span class="hljs-string">'user3'</span></span><span> =&gt; [</span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">85</span></span><span>, </span><span><span class="hljs-string">'time'</span></span><span> =&gt; </span><span><span class="hljs-number">120</span></span><span>],
    </span><span><span class="hljs-string">'user1'</span></span><span> =&gt; [</span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">92</span></span><span>, </span><span><span class="hljs-string">'time'</span></span><span> =&gt; </span><span><span class="hljs-number">110</span></span><span>],
    </span><span><span class="hljs-string">'user2'</span></span><span> =&gt; [</span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">85</span></span><span>, </span><span><span class="hljs-string">'time'</span></span><span> =&gt; </span><span><span class="hljs-number">100</span></span><span>],
    </span><span><span class="hljs-string">'user4'</span></span><span> =&gt; [</span><span><span class="hljs-string">'score'</span></span><span> =&gt; </span><span><span class="hljs-number">92</span></span><span>, </span><span><span class="hljs-string">'time'</span></span><span> =&gt; </span><span><span class="hljs-number">130</span></span><span>],
];
</span></span>

Die aktuellen Anforderungen sind:

  1. Erste Sortierung nach Punktzahl (Punktzahl);

  2. Wenn die Bewertungen gleich sind, sortieren Sie sie in der Abschlusszeit (Zeit) in aufsteigender Reihenfolge.

  3. Wenn der Punktzahl und die Zeit gleich sind, sortieren Sie es in aufsteigender Reihenfolge nach Benutzername (Schlüsselname).

Implementierungsmethode

Schritt 1: Passen Sie die Sortierlogik an

Um eine komplexe Sortierung zu erreichen, können Sie uasort () in Kombination mit benutzerdefinierten Funktionen verwenden:

 <span><span><span class="hljs-title function_ invoke__">uasort</span></span><span>(</span><span><span class="hljs-variable">$users</span></span><span>, function(</span><span><span class="hljs-variable">$a</span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
    </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$a</span></span><span>[</span><span><span class="hljs-string">'score'</span></span><span>] == </span><span><span class="hljs-variable">$b</span></span><span>[</span><span><span class="hljs-string">'score'</span></span><span>]) {
        </span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$a</span></span><span>[</span><span><span class="hljs-string">'time'</span></span><span>] == </span><span><span class="hljs-variable">$b</span></span><span>[</span><span><span class="hljs-string">'time'</span></span><span>]) {
            </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-number">0</span></span><span>; </span><span><span class="hljs-comment">// Für die spätere Verwendung lassenksortSortieren des Prozessschlüsselnamens</span></span><span>
        }
        </span><span><span class="hljs-keyword">return</span></span><span> (</span><span><span class="hljs-variable">$a</span></span><span>[</span><span><span class="hljs-string">'time'</span></span><span>] &lt; </span><span><span class="hljs-variable">$b</span></span><span>[</span><span><span class="hljs-string">'time'</span></span><span>]) ? -</span><span><span class="hljs-number">1</span></span><span> : </span><span><span class="hljs-number">1</span></span><span>; </span><span><span class="hljs-comment">// Aufstiegszeit</span></span><span>
    }
    </span><span><span class="hljs-keyword">return</span></span><span> (</span><span><span class="hljs-variable">$a</span></span><span>[</span><span><span class="hljs-string">'score'</span></span><span>] &gt; </span><span><span class="hljs-variable">$b</span></span><span>[</span><span><span class="hljs-string">'score'</span></span><span>]) ? -</span><span><span class="hljs-number">1</span></span><span> : </span><span><span class="hljs-number">1</span></span><span>; </span><span><span class="hljs-comment">// Absteigende Punktzahl</span></span><span>
});
</span></span>

Schritt 2: Behandeln Sie die gleiche Sortierung von Schlüsselnamen

Da uasort () die Reihenfolge der Schlüsselnamen nicht beeinflusst, können wir KSORT () verwenden, um die Schlüsselnamen zu sortieren, aber dieser Schritt macht nur Sinn, wenn die Werte gleich sind. Zwischenumwandlungsstrukturen können verwendet werden:

 <span><span><span class="hljs-comment">// Gruppen Sie die sortierten Arrayschlüssel neu zusammen</span></span><span>
</span><span><span class="hljs-variable">$temp</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$users</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-variable">$groupKey</span></span><span> = </span><span><span class="hljs-variable">$value</span></span><span>[</span><span><span class="hljs-string">'score'</span></span><span>] . </span><span><span class="hljs-string">'-'</span></span><span> . </span><span><span class="hljs-variable">$value</span></span><span>[</span><span><span class="hljs-string">'time'</span></span><span>];
    </span><span><span class="hljs-variable">$temp</span></span><span>[</span><span><span class="hljs-variable">$groupKey</span></span><span>][</span><span><span class="hljs-variable">$key</span></span><span>] = </span><span><span class="hljs-variable">$value</span></span><span>;
}

</span><span><span class="hljs-comment">// Sortieren Sie jede Gruppe von Schlüsselnamen</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$temp</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> &amp;</span><span><span class="hljs-variable">$group</span></span><span>) {
    </span><span><span class="hljs-title function_ invoke__">ksort</span></span><span>(</span><span><span class="hljs-variable">$group</span></span><span>); </span><span><span class="hljs-comment">// Schlüsselname aufsteigend</span></span><span>
}

</span><span><span class="hljs-comment">// Sich in das Endergebnis verschmelzen</span></span><span>
</span><span><span class="hljs-variable">$final</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$temp</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$group</span></span><span>) {
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$group</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$k</span></span><span> =&gt; </span><span><span class="hljs-variable">$v</span></span><span>) {
        </span><span><span class="hljs-variable">$final</span></span><span>[</span><span><span class="hljs-variable">$k</span></span><span>] = </span><span><span class="hljs-variable">$v</span></span><span>;
    }
}
</span></span>

Zu diesem Zeitpunkt ist $ Final das, was wir erwarten, in absteigender Reihenfolge der Punktzahl, der aufsteigenden Zeit- und Aufstiegsreihenfolge der Schlüsselnamen sortiert.

4. Simplified Version Implementierung (zweidimensionaler Sortier + Schlüsselname)

In den tatsächlichen Projekten können Sie auch die Daten abflachen, Sortiergewichte einführen und in Kombination mit Array_Multisort () arbeiten, aber diese Methode ist nicht sehr freundlich, um den Schlüsselnamen zu halten. Durch die Verwendung von Arsort und Ksort in Kombination können Sie die vollständige Struktur und die Schlüsselnamen des assoziativen Arrays erhalten.

5. Zusammenfassung

arsort () und ksort () selbst können die Sortierung von mehreren Konditions-Sortierungen nicht direkt unterstützen, aber durch Gruppierungsverarbeitung und mehrstufige Sortierlogik in Kombination mit Funktionen wie Uasort () können die Effekte, die der Reihenfolge von Col1 Desc und Col2 ASC in SQL ähneln, flexibel implementiert werden. Das Beherrschen dieser Sortiertechniken hilft Entwicklern, sich im Zusammenhang mit komplexen Array -Daten wohler zu fühlen.