区域设置感知字符串比较

Max*_*Max 2 php sorting localization string-comparison

strcmp正在组合使用usort,以便对一系列国家/地区名称进行排序.目前,排序顺序为:

Belgien
Frankreich
Italien
Luxemburg
Niederlande
Spanien
United Kingdom
Österreich
Run Code Online (Sandbox Code Playgroud)

这是正确的,除了的位置Österreich.它应该在Niederlande和之间Spanien.

我也试过strnatcmpstrcoll(同setlocale),但排序顺序是不是我想要的方式.结果不是来自mysql数据库,因此不能通过mysql查询进行排序.

Max*_*Max 5

老问题,同时我在另一家公司的另一个项目上工作,但最近遇到了同样的问题.最终工作的是安装PHP 的intl扩展.

sudo apt-get install php5-intl
Run Code Online (Sandbox Code Playgroud)

然后使用:

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

$coll = collator_create('de_DE');
$coll->sort($arr);
print_r($arr);
Run Code Online (Sandbox Code Playgroud)

按预期顺序返回结果:

Array
(
    [0] => Ásdf
    [1] => Belgien
    [2] => Frankreich
    [3] => Italien
    [4] => Luxemburg
    [5] => Niederlande
    [6] => Österreich
    [7] => Spanien
    [8] => United Kingdom
)
Run Code Online (Sandbox Code Playgroud)