Bei der Entwicklung mehrsprachiger Anwendungen betreffen wir häufig String -Vergleichsprobleme. PHP bietet mehrere Möglichkeiten zum Vergleichen von Zeichenfolgen, und die Funktion von Strcoll () ist besonders interessant, da sie das Ergebnis des Vergleichs basierend auf dem aktuellen Gebietsschema bestimmt. In diesem Artikel werden die Leistungsunterschiede von StrColl () unter verschiedenen Gebietsschema -Einstellungen untersucht und durch bestimmte Codebeispiele veranschaulicht.
Strcoll () ist eine integrierte Funktion in PHP, die zwei Zeichenfolgen basierend auf den Gebietsschemasvergleich vergleicht. Es gibt ein Ergebnis ähnlich wie Strcmp () zurück:
Gibt 0 zurück, um anzuzeigen, dass die beiden Zeichenfolgen im aktuellen Gebietsschema gleich sind;
Rückkehr weniger als 0 bedeutet, dass die erste Zeichenfolge vor dem zweiten in der Sortierung eingestuft wird.
Gibt mehr als 0 zurück, um anzuzeigen, dass die erste Zeichenfolge nach der zweiten in der Sortierung ist.
Im Gegensatz zu Strcmp () berücksichtigt Strcoll () Gebietsschemaregeln, wie die Sortiermethode von Zeichen, Fallempfindlichkeit und die Verarbeitung einiger Sonderzeichen.
In PHP können Sie die Funktion SetLocale () verwenden, um die aktuelle Gebietsschemaseinstellung festzulegen. Zum Beispiel:
setlocale(LC_COLLATE, 'en_US.UTF-8');
LC_COLLATE ist eine Kategorie, die speziell verwendet wird, um den String -Vergleich und -sortieren zu beeinflussen. Andere Kategorien wie LC_TIME , LC_MONETARY usw. wirken sich auf Zeit, Währung und andere Formate aus.
Nehmen wir die beiden Gebietsschema, Deutsch und Englisch als Beispiele, und sehen Sie sich die Leistungsunterschiede von Strcoll () an.
setlocale(LC_COLLATE, 'en_US.UTF-8');
echo strcoll("z", "?"); // Ausgangsergebnis A
setlocale(LC_COLLATE, 'de_DE.UTF-8');
echo strcoll("z", "?"); // Ausgangsergebnis B
Auf Englisch ist "Z" vor "?", Seit "?" wird als phonischer Brief angesehen, es kann nach "z" oder sogar in der Nähe von "a" sein. Daher können die Ausgangsergebnisse A und B unterschiedlich sein.
Nehmen wir an, wir haben eine Reihe von Namen mit Akzenten, die wir nach den Spracheinstellungen des Benutzers sortieren möchten. Der Code ist wie folgt:
$names = ["Zoe", "?nne", "Anna", "émile"];
setlocale(LC_COLLATE, 'en_US.UTF-8');
usort($names, function($a, $b) {
return strcoll($a, $b);
});
print_r($names);
Unter en_us.utf-8 kann die Sortierung sein:
Array
(
[0] => Anna
[1] => émile
[2] => Zoe
[3] => ?nne
)
Wenn er durch de_de.utf-8 ersetzt wird:
setlocale(LC_COLLATE, 'de_DE.UTF-8');
Dann können Sie:
Array
(
[0] => Anna
[1] => ?nne
[2] => émile
[3] => Zoe
)
In einigen Systemen kann das verfügbare Gebietsschema begrenzt sein. Sie können es anzeigen, indem Sie den folgenden Befehl in der Befehlszeile ausführen:
locale -a
Oder versuchen Sie, das Gebietsschema in PHP festzulegen und den Rückgabewert von SetLocale () zu verwenden, um festzustellen, ob es erfolgreich ist.
Überprüfen Sie immer den Rückgabewert von setLocale (), um sicherzustellen, dass das Gebietsschema korrekt eingestellt ist.
Wenn Sie die Eingabestrach der Benutzer sensibel sortieren müssen, verwenden Sie StrColl () anstelle von strcmp () .
Für die plattformübergreifende Konsistenz wird empfohlen, das erforderliche Gebietsschema in der Anwendung klar anzugeben und sicherzustellen, dass diese Einstellungen in der Serverkonfiguration unterstützt werden.
Wenn die Sortierergebnisse von StrColl () für die Front-End-Anzeige verwendet werden (z. B. Kontaktliste, Ländername usw.), simulieren Sie bitte verschiedene Orte im Test, um sicherzustellen, dass die Sortierlogik den Erwartungen entspricht.
Sie können den Sortierungseffekt verschiedener Orte unter Verwendung der folgenden Adresse ausprobieren:
https://gitbox.net/locale-strcoll-demo.php
Die Seite unterstützt die Auswahl verschiedener Orte und die Eingabe von Zeichenfolgenpaaren, um sie zu vergleichen, damit Sie die Leistung von StrColl () unter verschiedenen Orten intuitiv verstehen können.
Strcoll () ist eine sehr nützliche, aber oft übersehene Funktion. Durch ein vernünftiges Gebietsschema kann es uns helfen, eine String -Vergleichslogik zu implementieren, die mehr mit den Benutzersprachgewohnheiten entspricht. Nutzen Sie die Nutzung von StrColl () in mehrsprachigen Projekten können die Benutzererfahrung erheblich verbessern.