Während der Entwicklung müssen wir oft eine Reihe von Saiten sortieren. Traditionelle Sortiermethoden sortieren häufig Zeichenfolgen in der Wörterbuchreihenfolge, und manchmal möchten wir, dass die Sortierergebnisse der "natürlichen Sortierregel" entsprechen, dh die Werte werden nach der tatsächlichen Größe sortiert, anstatt nur in Charakterreihenfolge der Zeichenfolge zu sortieren. PHP bietet eine sehr nützliche Funktion Strnatcmp (), um natürliche Sortierung implementieren zu können.
Die natürliche Sortierung bezieht sich, wie der Name schon sagt, auf die Sortierung von Daten nach dem konventionellen Verständnis des Menschen. Wenn beispielsweise Dateinamen sortiert werden, sollte "Datei10" von "Datei2" folgen, anstatt zuerst in Wörterbuchreihenfolge zu sein. Traditionelle Regeln für die Sortierung von Dictionary -Sortieren werden "Datei10" vor "Datei2" rangieren, da "1" weniger als "2" ist, während die natürliche Sortierung nach numerischer Größe sortiert wird.
Die Funktion von PHP von PHP ist eine natürliche Sortierfunktion zum Vergleich von zwei Zeichenfolgen. Es ist ähnlich wie bei Strcmp () , aber Strnatcmp () wird die numerischen Teile einer Zeichenfolge intelligenter behandeln, wodurch menschliche Sortierregeln ermöglicht werden.
Funktionsprototyp:
<span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-title function_ invoke__">strnatcmp</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str1</span></span><span> , </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str2</span></span><span> )
</span></span>$ str1 und $ str2 : Diese beiden Parameter sind zwei Zeichenfolgen, die verglichen werden müssen.
Rückgabewert: Wenn $ str1 vor $ str2 eingestuft wird, gibt es eine negative Ganzzahl zurück. Wenn $ str1 gleich $ str2 ist, gibt es 0 zurück; Wenn $ str1 nach $ str2 eingestuft wird, gibt es eine positive Ganzzahl zurück.
Im Gegensatz zu herkömmlichen String -Vergleichsfunktionen analysiert Strnatcmp () die numerischen Teile in der Zeichenfolge und vergleicht sie basierend auf der tatsächlichen numerischen Größe. Es vergleicht jeden Teil der Zeichenfolge nacheinander, bis das Vergleichsergebnis bestimmt ist.
Beim Vergleich von "Datei10" und "Datei2" vergleicht Strnatcmp () zunächst die Buchstabenteil "Datei" und vergleicht dann weiterhin die Nummer Teile 10 und 2 . Da 10 größer als 2 ist, wird "Datei10" hinter "Datei2" eingestuft.
Wir können Strnatcmp () verwenden, um eine Reihe von Dateinamen auf natürliche Weise zu sortieren. Der Code lautet wie folgt:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Reihe von Saiten, die sortiert werden müssen</span></span><span>
</span><span><span class="hljs-variable">$fileNames</span></span><span> = [</span><span><span class="hljs-string">'file2.txt'</span></span><span>, </span><span><span class="hljs-string">'file10.txt'</span></span><span>, </span><span><span class="hljs-string">'file1.txt'</span></span><span>, </span><span><span class="hljs-string">'file12.txt'</span></span><span>, </span><span><span class="hljs-string">'file11.txt'</span></span><span>];
</span><span><span class="hljs-comment">// verwendenusort()Kombiniertstrnatcmp()Natürliche Sortierung machen</span></span><span>
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$fileNames</span></span><span>, </span><span><span class="hljs-string">'strnatcmp'</span></span><span>);
</span><span><span class="hljs-comment">// Ausgabe sortierte Ergebnisse</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$fileNames</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . PHP_EOL;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>Ausgangsergebnis:
<span><span>file1.txt
file2.txt
file10.txt
file11.txt
file12.txt
</span></span>In diesem Beispiel erstellen wir zuerst ein Array mit Dateinamen und verwenden dann die Funktion usort (), um das Array auf natürliche Weise mit strnatcmp () zu sortieren. Die sortierten Arrays entsprechen der von uns erwarteten Reihenfolge, und die numerischen Teile sind in Größe angeordnet.
Zusätzlich zu Strnatcmp () liefert PHP auch StrnatCasecmp () , das der Funktion von strnatcmp () ähnelt, aber StrnatCasecmp () beim Vergleichen Fallunterschiede ignoriert.
Beispiel:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 忽略大小写Natürliche Sortierung machen</span></span><span>
</span><span><span class="hljs-variable">$fileNames</span></span><span> = [</span><span><span class="hljs-string">'File2.txt'</span></span><span>, </span><span><span class="hljs-string">'file10.txt'</span></span><span>, </span><span><span class="hljs-string">'File1.txt'</span></span><span>, </span><span><span class="hljs-string">'file12.txt'</span></span><span>, </span><span><span class="hljs-string">'file11.txt'</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$fileNames</span></span><span>, </span><span><span class="hljs-string">'strnatcasecmp'</span></span><span>);
</span><span><span class="hljs-comment">// Ausgabe sortierte Ergebnisse</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$fileNames</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . PHP_EOL;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>Ausgangsergebnis:
<span><span>File1.txt
File2.txt
file10.txt
file11.txt
file12.txt
</span></span>Durch die Verwendung von strnatcmp () und strnatcasecmp () können wir leicht sortieren, die Zahlen enthalten, um auf natürliche Weise zu enthält, um sicherzustellen, dass die Sortierergebnisse mit der menschlichen Intuition übereinstimmen. Diese Funktionen sind sehr geeignet für Szenarien wie Dateinamensortier, Versionsnummer -Vergleich usw., die eine natürliche Sortierung erfordern.
Ich hoffe, dieser Artikel kann Ihnen helfen, die natürlichen Sortierfunktionen und ihre Anwendungen in PHP besser zu verstehen.