【问题标题】:sort array with special characters in php在php中使用特殊字符对数组进行排序
【发布时间】:2011-02-23 06:50:20
【问题描述】:

我有一个数组,我正在尝试使用 php 进行排序。问题是数组中有重音字符,需要使用“法语”规则进行排序。

 cote < côte < coté < côté

我尝试了很多东西,比如使用 php collat​​ors,但我得到了以下错误:

PHP Fatal error:  Class 'Collator' not found

我也尝试设置语言环境,但它没有做任何事情,所以我不确定我做对了,或者我是否需要重新设置语言环境。我有点困惑。

如果有帮助,我正在使用 PHP 5.2.4。如果我不带任何东西使用 asort,它会将所有带有重音字符的单词放在最后。

谢谢。

【问题讨论】:

  • 我不会将此作为答案,但值得一试:brainbell.com/tutorials/php/Sorting_With_Foreign_Languages.htm
  • cote &lt; côte &lt; coté &lt; côté 哇...这是什么规则?!
  • @Anthony,我会检查一下。 @nickf 哈哈。基本上,重音字母位于非重音字母和下一个字母之间。一个
  • 那不解释côte &lt; coté &lt; côté
  • 你是对的。哈哈 搞砸了我是从 php 网站得到的,所以要么是错的,要么是我错了。我认为应该是 cote

标签: php sorting collation


【解决方案1】:

我最终将法语语言包安装到我的服务器并使用以下内容:

setlocale(LC_COLLATE, 'fr_CA.utf8');
asort($array, SORT_LOCALE_STRING);

满足我的需求...

【讨论】:

  • 刚用过这个。完美运行!
【解决方案2】:

Collator class 是 PHP 的 internationalization extension 的一部分,它是 PHP 5.3 的标准配置

由于您拥有 5.2.4,因此您需要 install this extension 才能使用其类。

【讨论】:

  • 升级到5.3不是更好吗?我也在ubuntu上。
  • 如果升级到 5.3 是一种选择,那么我肯定会说“去吧”。然后你就可以开始使用很酷的新语言特性了,比如闭包和后期静态绑定。
【解决方案3】:

对于那些在巴西的人:

setlocale(LC_ALL, "pt_BR", "ptb");

实际例子:

function cmp($a, $b) {
return strcmp($a["first_name"], $b["first_name"]);} $docs = array(
1 => array(
    'first_name' => 'Márcia Amanda',
    'crm' => 4321,
    'job' => 'Médica',
    'sex' => 'f'
),
2 => array(
    'first_name' => 'Pedro Alexandre',
    'crm' => 6789,
    'job' => 'Veterinário',
    'sex' => 'm'
),
3 => array(
    'first_name' => 'Lívia Pereira',
    'crm' => 8765,
    'job' => 'Obstetra',
    'sex' => 'f'
));  usort($docs, "cmp", SORT_LOCALE_STRING);

                            $qtas_pessoas = count($docs);

                            $j=1;

                            while (list($key, $value) = each($docs)) {

                            if ($j==1) echo "<div class='wrapper indent-bottom7-1'>";

                            $dr='';
                            if ($value["sex"]=='m') $dr='Dr.';
                            else $dr='Dra.';

                            echo "
                            <div class='grid_4 alpha'>
                                <h6 class='p2'>$dr ".$value["first_name"]."<br/>CRM ".$value["crm"]."</h6>
                                ".$value["job"]."
                            </div>\n
                            ";
                           $j++;
                           if ($j>$qtas_pessoas) {
                               echo "</div>";
                               break; // TEMOS APENAS X PESSOAS...
                           }
                           // quebrar sempre de 3 em 3
                           if ($j % 3 == 1) echo "</div><div class='wrapper indent-bottom7-1'>"; 
                            }

路伊·安杰利诺

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 2016-09-13
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    相关资源
    最近更新 更多