Array mit Sortierung sortieren

8

Ich habe ein Array mit Wörtern auf Französisch: ['États-Unis', 'Espagne', usw.], die ich gerne alphabetisch nach ihrem Gebietsschema (fr_FR) sortiert hätte

Ich verwende den folgenden Code:

%Vor%

, aber ich bekomme den Fehler U_USING_DEFAULT_WARNING, wo ich annahme, dass Englisch oder ein anderes Gebietsschema verwendet wird. Noch wichtiger ist, dass das Array nicht korrekt sortiert ist (US erscheint vor Spanien, wo ich erwarte, dass das Gegenteil passiert).

Ich habe das intl-Paket installiert und mein System hat die entsprechenden locales (Ubuntu)

%Vor%

Ich habe verschiedene Kombinationen ausprobiert, wenn ich das Collation-Objekt ohne ein gutes Ergebnis erstellt habe: "fr-FR", "fr-FR.UTF8", etc.

Gibt es noch etwas, das mir fehlt?

    
Dan 26.11.2012, 18:55
quelle

3 Antworten

5

Laut diesem Blogpost , für die Wörter cote , coté , côte und côté (bereits auf Englisch sortiert), lautet die Sortierreihenfolge auf Französisch: cote , côte , coté und côté . Der folgende Code sortiert die Wörter in der französischen Sortierung:

%Vor%

Und das Druckergebnis lautet wie folgt:

%Vor%

Im selben Blogbeitrag sagt der Autor:

  

[...] Diakritika werden von rechts nach links und nicht von links nach rechts ausgewertet. So kommt côte vor coté statt nach Sprachen wie Englisch, die sie von links nach rechts auswertet. Weil das Wort côte am "e" am Ende des Wortes keine AKUTE hat, während coté tut. In Englisch und den meisten anderen Sprachen beginnt die Bewertung auf der linken Seite und daher ist die CIRCUMFLEX oder das Fehlen davon auf dem "o" der bestimmende Faktor in der Bestellung.

Wenn Sie also ein Array mit den Wörtern Spanien und US haben, haben sie die gleiche Reihenfolge in Englisch und Französisch.

Sie sollten auch im Hinterkopf behalten, dass die Methode asort die Indexzuordnung des Arrays verwaltet. Siehe den Unterschied:

%Vor%

Über U_USING_DEFAULT_WARNING

Gemäß dieser API-Dokumentation :

  

U_USING_DEFAULT_WARNING gibt an, dass die Standardgebietsschemadaten verwendet wurden. weder das angeforderte Gebietsschema noch eines seiner Fallback-Länder konnten gefunden werden.

Wenn ich zum Beispiel das Gebietsschema fr_FR verwende, erhalte ich ein U_USING_FALLBACK_WARNING, das angibt, dass ein Gebietsschema verwendet wurde, in diesem Fall das Gebietsschema fr .

Gebietsschema

Wie es scheint, hat Ihr Computer keine Unterstützung für die französische Sprache (oder tut es, aber irgendwie kann PHP sie nicht benutzen und dann auf die Standardsprache zurückgreifen), obwohl der Befehl locale -a die französischen Pakete anzeigt . Ich habe einige Vorschläge, die Sie ausprobieren können.

Listen Sie zuerst alle unterstützten Ländereinstellungen auf:

%Vor%

Generiere jetzt die Sprachen, die du brauchst:

%Vor%

Falls es nicht funktioniert, versuchen Sie, die Pakete language-pack-fr und language-support-fr zu installieren und die Sprachen erneut zu generieren.

Dieses Problem ist seltsam. Ich habe eine VM mit Ubuntu 11.04 und PHP 5.3.8 und es funktioniert gut, auch in meinem Debian 6, und ich habe kein Paket installiert oder irgendetwas konfiguriert.

    
mayconbordin 30.11.2012, 14:05
quelle
0

Ich benutze Cygwin:

%Vor%

(Ich habe keine fr_FR.iso88591 in der Ausgabe)

Code (Dateicodierung ist UTF-8):

%Vor%

Ausgabe:

%Vor%

Und hier ist der Trick: Ich konvertiere Dateicodierung nach ISO 8859-1 (in vim, mache ich :set fileencoding=iso-8859-1 ) und versuche es erneut:

%Vor%

Einige Symbole sind defekt, aber ich denke, das liegt daran, dass mein Terminal die angegebene Codepage nicht unterstützt. Die Hauptsache ist, dass die Reihenfolge der Strings jetzt genau das ist, was Sie beschrieben haben: "Espagne" kommt nach "États-Unis".

Also, ich denke, es ist eine Dateicodierung.

    
scriptin 01.12.2012 14:20
quelle
0

Probiere nur 'FR', es sollte für dein System funktionieren, denke ich:

%Vor%     
SergeyS 06.12.2012 17:40
quelle

Tags und Links