在php中使用特殊字符排序数组

时间:2010-05-24 15:05:55

标签: php sorting collation

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

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

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

PHP Fatal error:  Class 'Collator' not found

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

如果有帮助,我正在使用PHP 5.2.4。如果我没有任何东西使用asort,它会在结尾处添加带有重音符号的所有单词。

感谢。

3 个答案:

答案 0 :(得分:11)

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

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

适合我的需要......

答案 1 :(得分:2)

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

由于你有5.2.4,你需要install this extension才能使用它的类。

答案 2 :(得分:0)

对于那些在巴西的人:

setlocale(LC_ALL,&#34; pt_BR&#34;,&#34; ptb&#34;);

实际例子:

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'>"; 
                            }

作者:Luy Angelino