2

国名の配列を並べ替えるためにとstrcmp組み合わせて使用​​しています。usort現在、ソート順は次のとおりです。

Belgien
Frankreich
Italien
Luxemburg
Niederlande
Spanien
United Kingdom
Österreich

の位置を除けば、どちらが正しいかÖsterreich。との間にある必要がNiederlandeありSpanienます。

strnatcmpand strcoll(with )も試しsetlocaleましたが、並べ替え順序が希望どおりではありませんでした。結果はmysqldbからのものではないため、mysqlクエリによる並べ替えはオプションではありません。

4

2 に答える 2

5

古い質問ですが、その間、私は別の会社で別のプロジェクトに取り組んでいますが、最近同じ問題に直面しました。最終的に機能したのは、PHP用のintl拡張機能をインストールすることでした。

sudo apt-get install php5-intl

そして、以下を使用します。

$arr = array(
"Belgien",
"Frankreich",
"Italien",
"Luxemburg",
"Niederlande",
"United Kingdom",
"Österreich",
"Spanien",
"Ásdf",
);

$coll = collator_create('de_DE');
$coll->sort($arr);
print_r($arr);

期待どおりの順序で結果を返しました。

Array
(
    [0] => Ásdf
    [1] => Belgien
    [2] => Frankreich
    [3] => Italien
    [4] => Luxemburg
    [5] => Niederlande
    [6] => Österreich
    [7] => Spanien
    [8] => United Kingdom
)
于 2011-05-22T14:45:08.867 に答える
0

これは機能します(スクリプトがUTF-8であると想定しています):

<?php

$arr = array(
"Belgien",
"Frankreich",
"Italien",
"Luxemburg",
"Niederlande",
"United Kingdom",
"Österreich",
"Spanien",
"Ásdf",
);

setlocale(LC_COLLATE, "pt_PT.UTF8");
usort($arr, 'strcoll');
print_r($arr);

私に与える:

配列
((
    [0]=>Ásdf
    [1]=>ベルギー
    [2]=>フランクライヒ
    [3]=>イタリア人
    [4]=>ルクセンブルグ
    [5] => Niederlande
    [6]=>オーストリア
    [7]=>スペイン
    [8]=>イギリス
)。

ただし、これは苦痛です。ロケールをインストールする必要があります。locale -aインストールされたロケールを提供します。たとえば、私のマシンでは次のようになります。

C
en_US
en_US.iso88591
en_US.utf8
POSIX
pt_PT.utf8
于 2010-07-08T13:55:52.490 に答える