【问题标题】:locale aware string comparision区域感知字符串比较
【发布时间】:2010-07-08 13:38:31
【问题描述】:

我将strcmpusort 结合使用,以便对国家名称数组进行排序。目前,排序顺序为:

Belgien
Frankreich
Italien
Luxemburg
Niederlande
Spanien
United Kingdom
Österreich

除了Österreich的位置之外,哪个是正确的。它应该在NiederlandeSpanien 之间。

我也尝试了strnatcmpstrcoll(使用setlocale),但排序顺序不是我想要的。结果不是来自 mysql 数据库,因此不能通过 mysql 查询进行排序。

【问题讨论】:

    标签: php localization string-comparison sorting


    【解决方案1】:

    老问题,同时我正在另一家公司从事另一个项目,但最近遇到了同样的问题。最终奏效的是为 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
    )
    

    【讨论】:

      【解决方案2】:

      这可行(假设脚本是 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

      【讨论】:

      • 我尝试了您的代码和 setlocale(LC_COLLATE, "de_DE.UTF8");,但它不会按正确的顺序对数组进行排序,尽管我验证了语言环境可用。
      • @Max 您的脚本可能不是 UTF-8 格式。试试 de_DE.iso88591
      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多