[In einem mehrdimensionalen Array, wie Sie die UKSort -Funktion verwenden, um eine genaue Sortierverarbeitung von Schlüssel auszuführen? ]
In PHP sind Arrays sehr leistungsstarke und flexible Datenstrukturen. Mehrdimensionale Arrays sind eines der gängigen Anwendungsszenarien und werden häufig zum Speichern komplexer Daten verwendet. Oft begegnen wir jedoch auf die Notwendigkeit, nach Schlüssel zu sortieren. PHP bietet eine Vielzahl von Funktionen zum Sortieren von Arrays, unter denen UKSSort () eine Funktion ist, die Sortierregeln anpassen kann, mit der häufig Arrays nach Schlüssel sortiert werden. Dieser Artikel konzentriert sich darauf, wie die Funktion uksort () verwendet wird, um eine genaue Schlüsselsortierung in mehrdimensionalen Arrays durchzuführen.
UkSort () ist eine Funktion in PHP, die die Schlüssel eines Arrays durch benutzerdefinierte Vergleichsfunktionen sortiert. Die grundlegende Syntax dieser Funktion lautet wie folgt:
<span><span><span class="hljs-title function_ invoke__">uksort</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> &</span><span><span class="hljs-variable">$array</span></span><span>, </span><span><span class="hljs-keyword">callable</span></span><span> </span><span><span class="hljs-variable">$cmp_function</span></span><span>): </span><span><span class="hljs-keyword">bool</span></span><span>
</span></span>
Array : Das zu sortierende Array (nach Schlüssel sortiert).
cmp_function : Eine Rückruffunktion, mit der Array -Tasten verglichen werden. Die Rückruffunktion muss eine Ganzzahl zurückgeben, um die Reihenfolge zu bestimmen, in der die beiden Schlüssel sortiert werden.
Beim Umgang mit mehrdimensionalen Arrays sind die Elemente im Array normalerweise auch Arrays. Nehmen wir beispielsweise an, wir haben ein mehrdimensionales Array, das die Informationen der Schüler aufzeichnet, und die Informationen jedes Schülers umfassen Namen, Alter und Punktzahl usw.:
<span><span><span class="hljs-variable">$students</span></span><span> = [
</span><span><span class="hljs-string">'student1'</span></span><span> => [</span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Tom'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> => </span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> => </span><span><span class="hljs-number">88</span></span><span>],
</span><span><span class="hljs-string">'student2'</span></span><span> => [</span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Jerry'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> => </span><span><span class="hljs-number">21</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> => </span><span><span class="hljs-number">92</span></span><span>],
</span><span><span class="hljs-string">'student3'</span></span><span> => [</span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Alice'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> => </span><span><span class="hljs-number">22</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> => </span><span><span class="hljs-number">85</span></span><span>],
</span><span><span class="hljs-string">'student4'</span></span><span> => [</span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Bob'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> => </span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> => </span><span><span class="hljs-number">95</span></span><span>]
];
</span></span>
In solchen mehrdimensionalen Arrays könnte unser Ziel sein, nach einem bestimmten Schlüssel (z. B. Name, Alter oder Punktzahl des Schülers) zu sortieren.
Um Schlüsseln in einem mehrdimensionalen Array zu sortieren, müssen wir zunächst verstehen, wie die Sortierregeln über uksort () angepasst werden können. Im Allgemeinen sortieren wir in jedem Array einen bestimmten Artikelwert.
Angenommen, wir wollen nach dem Alter jedes Schülers sortieren. Da uksort () nur Tasten von äußeren Arrays verarbeitet und nicht direkte Tasten manipuliert, müssen wir über eine Vergleichsfunktion auf das Alter jedes Schülers zugreifen und sie danach sortieren.
Hier ist ein Beispiel für die Sortierung durch Schüler, die die Funktion uksort () verwenden:
<span><span><span class="hljs-variable">$students</span></span><span> = [
</span><span><span class="hljs-string">'student1'</span></span><span> => [</span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Tom'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> => </span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> => </span><span><span class="hljs-number">88</span></span><span>],
</span><span><span class="hljs-string">'student2'</span></span><span> => [</span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Jerry'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> => </span><span><span class="hljs-number">21</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> => </span><span><span class="hljs-number">92</span></span><span>],
</span><span><span class="hljs-string">'student3'</span></span><span> => [</span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Alice'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> => </span><span><span class="hljs-number">22</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> => </span><span><span class="hljs-number">85</span></span><span>],
</span><span><span class="hljs-string">'student4'</span></span><span> => [</span><span><span class="hljs-string">'name'</span></span><span> => </span><span><span class="hljs-string">'Bob'</span></span><span>, </span><span><span class="hljs-string">'age'</span></span><span> => </span><span><span class="hljs-number">20</span></span><span>, </span><span><span class="hljs-string">'score'</span></span><span> => </span><span><span class="hljs-number">95</span></span><span>]
];
</span><span><span class="hljs-comment">// Benutzerdefinierte Vergleichsfunktionen</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compare_age</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$a</span></span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
</span><span><span class="hljs-keyword">global</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>;
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$a</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>] - </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$b</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>];
}
</span><span><span class="hljs-comment">// verwendenuksortSortieren Sie das Array nach dem Alter des Schülers</span></span><span>
</span><span><span class="hljs-title function_ invoke__">uksort</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>, </span><span><span class="hljs-string">'compare_age'</span></span><span>);
</span><span><span class="hljs-comment">// Ausgabe sortierte Ergebnisse</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>);
</span></span>
erklären:
Benutzerdefinierte Vergleichsfunktion Compare_age : Es akzeptiert zwei Parameter (Schlüssel von zwei Arrays). Mit diesen beiden Schlüsseln greifen wir vom Alter des Schülers aus dem $ Student -Array zu und vergleichen sie, um eine Ganzzahl zurückzugeben, um die Sortierreihenfolge zu bestimmen.
uksort () rufen: Wir übergeben die Funktion compare_age als Argument an uksort () , in dem die Schlüssel des Studentenarrays nach Alter sortiert werden.
Angenommen, wir möchten basierend auf den Bewertungen der Schüler sortieren, die Methode ähnelt der Alterssortierung und wir müssen nur den Zugriffswert in der Vergleichsfunktion ändern.
<span><span><span class="hljs-comment">// Benutzerdefinierte Vergleichsfunktionen(Sortieren nach Punktzahlen)</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compare_score</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$a</span></span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
</span><span><span class="hljs-keyword">global</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>;
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$students</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">$students</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-comment">// verwendenuksortSortieren Sie Arrays nach Brüchen</span></span><span>
</span><span><span class="hljs-title function_ invoke__">uksort</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>, </span><span><span class="hljs-string">'compare_score'</span></span><span>);
</span><span><span class="hljs-comment">// Ausgabe sortierte Ergebnisse</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>);
</span></span>
In einigen komplexen Sortierszenarien müssen wir möglicherweise nach mehreren Kriterien sortieren, beispielsweise zuerst nach Alter, und wenn das Alter das gleiche ist, nach Punktzahl. Wir können dies erreichen, indem wir mehrere Felder gleichzeitig in der Vergleichsfunktion vergleichen:
<span><span><span class="hljs-comment">// Benutzerdefinierte Vergleichsfunktionen(Nach Alter und Punktzahl sortieren)</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compare_age_and_score</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$a</span></span></span><span>, </span><span><span class="hljs-variable">$b</span></span><span>) {
</span><span><span class="hljs-keyword">global</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>;
</span><span><span class="hljs-comment">// Vergleich des Alters</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$a</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>] == </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$b</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>]) {
</span><span><span class="hljs-comment">// Wenn das Alter das gleiche ist,Sortieren nach Punktzahlen</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$students</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">$students</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-comment">// Ansonsten nach Alter sortieren</span></span><span>
</span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$a</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>] - </span><span><span class="hljs-variable">$students</span></span><span>[</span><span><span class="hljs-variable">$b</span></span><span>][</span><span><span class="hljs-string">'age'</span></span><span>];
}
</span><span><span class="hljs-comment">// verwendenuksortKomplexe Sortierung</span></span><span>
</span><span><span class="hljs-title function_ invoke__">uksort</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>, </span><span><span class="hljs-string">'compare_age_and_score'</span></span><span>);
</span><span><span class="hljs-comment">// Ausgabe sortierte Ergebnisse</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$students</span></span><span>);
</span></span>
UKSORT () ist ein leistungsstarkes Tool, mit dem wir Tasten von Arrays nach benutzerdefinierten Regeln sortieren können. Für mehrdimensionale Arrays müssen wir normalerweise über die Schlüssel des äußeren Arrays auf die Werte der internen Elemente zugreifen und sie dann nach diesen Werten sortieren. Unabhängig davon, ob es sich um eine einzelne bedingte Sortierung oder eine komplexe multi-konditionelle Sortierung handelt, bietet UKSSort () flexible Unterstützung.
Ich hoffe, dass die Erklärung in diesem Artikel Ihnen helfen kann, zu verstehen, wie Sie uksort () verwenden, um Schlüssel in mehrdimensionalen Arrays zu sortieren, flexible Anpassungen vorzunehmen und entsprechend Ihren Anforderungen zu verwenden.