2

strcmp正在结合使用usort以对一系列国家名称进行排序。目前,排序顺序为:

Belgien
Frankreich
Italien
Luxemburg
Niederlande
Spanien
United Kingdom
Österreich

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

我也试过strnatcmpand strcoll(with setlocale),但排序顺序不是我想要的。结果不是来自 mysql 数据库,因此不能通过 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] => 尼德兰德
    [6] => 奥斯特赖希
    [7] => 西班牙人
    [8] => 英国
)

然而,这是痛苦的;它需要安装语言环境。locale -a给你安装的语言环境,例如在我的机器上它给了我:

C
zh_CN
en_US.iso88591
en_US.utf8
POSIX
pt_PT.utf8
于 2010-07-08T13:55:52.490 回答