我将strcmp
与usort
结合使用,以便对国家/地区名称数组进行排序。目前,排序顺序为:
Belgien
Frankreich
Italien
Luxemburg
Niederlande
Spanien
United Kingdom
Österreich
除Österreich
的位置外,这是正确的。它应该在Niederlande
和Spanien
之间。
我还尝试了strnatcmp
和strcoll
(使用setlocale
),但排序顺序不是我想要的方式。结果不是来自mysql db,因此不能通过mysql查询进行排序。
答案 0 :(得分:5)
老问题,同时我在另一家公司的另一个项目上工作,但最近遇到了同样的问题。最终工作的是为PHP安装intl extension。
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
)
答案 1 :(得分: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);
给了我:
Array ( [0] => Ásdf [1] => Belgien [2] => Frankreich [3] => Italien [4] => Luxemburg [5] => Niederlande [6] => Österreich [7] => Spanien [8] => United Kingdom )
然而,这很痛苦;它需要安装区域设置。 locale -a
为您提供已安装的区域设置,例如在我的机器上,它给了我:
C en_US en_US.iso88591 en_US.utf8 POSIX pt_PT.utf8