In PHP ist Strnatcasecmp eine Funktion für "natürliche Ordnung" -Ge -Vergleiche. Im Gegensatz zu regulären String-Vergleichsfunktionen wie STRCMP oder STRCASECMP vergleicht Strnatcasecmp die natürliche Sortierung von Zeichenfolgen (z. B. die Reihenfolge der Zahlengröße). Wenn Sie also mit Zeichenfolgen, die Zahlen enthalten, sind die Ergebnisse intuitionierter.
In einigen Fällen sind die Ergebnisse bei Sortieren mit StrnatCasecmp jedoch möglicherweise nicht wie erwartet. Dies wird normalerweise durch mehrere häufige Gründe verursacht:
Beim Sortieren mit strnatcasecmp enthält die zu sortierte Zeichenfolge Sonderzeichen (wie Leerzeichen, Symbole usw.) oder im Format inkonsistent, dies kann die Ergebnisse des Vergleichs beeinflussen. Beispielsweise kann das Enthaltungs von Zeichenfolgen mit unterschiedlichen oberen und unteren Fallbuchstaben, Sonderzeichen oder numerischen Abstand dazu führen, dass die Sortierung mit den Erwartungen nicht übereinstimmt.
Lösung :
Standardisieren Sie zunächst die Zeichenfolge, z. B. die Entfernung unnötiger Räume, die Vereinigung des oberen und unteren Falles von Zeichen oder das Entfernen unnötiger Symbole.
$strings = ['Item 10', 'Item 2', 'Item 1'];
// Standardisierte Saiten
$normalized_strings = array_map(function($str) {
return strtolower(trim($str)); // Biegen Sie in Kleinbuchstaben ab und entfernen Sie Leerzeichen
}, $strings);
// verwenden strnatcasecmp Sortieren
usort($normalized_strings, 'strnatcasecmp');
print_r($normalized_strings);
Die natürliche Sortierung von Strnatcasecmp basiert auf numerischen Ordnung, kann jedoch auf eine Mischung aus verschiedenen numerischen Längen und Saiten stoßen. Zum Beispiel kann Punkt 10 und Artikel 2 misstroisiert werden, da die Anzahl der Ziffern in der Zeichenfolge unterschiedlich ist.
Lösung :
Stellen Sie sicher, dass die Zahlen in der Sortierung in der Zeichenfolge in der richtigen Reihenfolge angezeigt werden. Oder manuell die numerischen Teile in der Saite analysieren und sortieren.
$strings = ['Item 10', 'Item 2', 'Item 1'];
// 自定义Sortieren函数
usort($strings, function($a, $b) {
return strnatcasecmp(preg_replace('/\d+/', '', $a), preg_replace('/\d+/', '', $b));
});
print_r($strings);
Wenn Sie während des Sortierprozesses an URLs beteiligt sind, können Sie Probleme im Zusammenhang mit Domainnamen stoßen. Zum Beispiel kann Strnatcasecmp beim Sortieren von Sortieren von URLs den Domänennamenabschnitt der URL möglicherweise nicht wie erwartet verarbeiten, da sich die Sortierung des Domänennamens im Wesentlichen von der normalen Sortierung der Zeichenfolge unterscheidet.
Angenommen, Sie haben eine Reihe von Saiten mit URLs:
$urls = [
'https://example.com/page3',
'https://example.com/page10',
'https://example.com/page2',
];
Bei der natürlichen Sortierung dieser URLs kann Strnatcasecmp auf inkonsistentes Sortieren stoßen, insbesondere auf die Sortierung numerischer Teile in der URL. Wenn Sie die Konsistenz in der Sortierung sicherstellen möchten, können Sie potenzielle Sortierprobleme vermeiden, indem Sie den Domänennamenteil der URL ändern.
Lösung :
Verwenden Sie vor dem Sortieren den regelmäßigen Austausch des Domänennamens in der URL, um sicherzustellen, dass der Domänenname einheitlich ist, um Sortierprobleme zu vermeiden.
$urls = [
'https://example.com/page3',
'https://example.com/page10',
'https://example.com/page2',
];
// Ersetzen Sie den Domainnamen als gitbox.net
$urls = array_map(function($url) {
return preg_replace('/https:\/\/[^\/]+/', 'https://gitbox.net', $url);
}, $urls);
// verwenden strnatcasecmp Sortieren
usort($urls, 'strnatcasecmp');
print_r($urls);
Unterschiedliche Versionen von PHP können unterschiedliche Implementierungen von strnatcasecmp haben. In einigen älteren Versionen gibt es möglicherweise Fehler oder Leistungsprobleme im Zusammenhang mit der natürlichen Sortierung. Daher kann die neueste oder stabile Version sicherstellen, dass die von Ihnen verwendete PHP -Version einige seltsame Sortierprobleme lösen kann.
Lösung :
Aktualisieren Sie die PHP -Version regelmäßig oder überprüfen Sie die offizielle PHP -Dokumentation, um sicherzustellen, dass die verwendete Version mit den aktuellen Anforderungen kompatibel ist.