PHP拉脱维亚数组排序

时间:2013-09-27 11:59:22

标签: php arrays sorting

我有一个问题..我有一系列拉脱维亚语单词(即Agita MatīsaĀris MatisovičsBaiba Matisone),我需要按字母顺序对此数组进行排序... 所以我不知道怎么做,因为它不是通常的拉丁字母...... 可以onyone帮助我吗? 这里有一些代码,描述了我如何得到这个数组:

foreach($pacienti as $key => $val)
                        {
                            $person = array();
                            foreach($val as $p)
                            {
                                $person[] = $p; 
                            }
                            $person = array_unique($person);


                            foreach($person as $pac)
                            {
                                if ($key != null)
                                    $div_patienti .= "<div id='".$key."' class='filial_r15'>".$pac."</div>";    
                            }

                        }

UPD1

这里是数组值:

array(1) { [0]=> string(36) "agita&nbsp;matīsa&nbsp;080569-11863" } array(1) { [0]=> string(35) "aija&nbsp;matīsa&nbsp;240938-11562" }

2 个答案:

答案 0 :(得分:3)

将您的语言环境设置为拉脱维亚语,然后使用SORT_LOCALE_STRING标志对数组进行排序。

setlocale(LC_ALL, 'lv_LV');
sort($array, SORT_LOCALE_STRING);

或者,如果要根据复杂的键结构进行某种自定义排序,可以将usortstrcoll一起用作区域设置敏感的字符串比较。

setlocale(LC_ALL, 'lv_LV');
usort($array, function($a, $b) {
    return strcoll($a['key'], $b['key']);
});

PS - 如果这是来自数据库,可能最好将数据库设置为处理(Latin-2?)字符集/排序规则,以便您可以按正确的顺序提取数据。

答案 1 :(得分:0)

您应该将搭配更改为utf8_unicode_ci,它会正确排序拉脱维亚重音符号。如果您无法修改数据库,则可以即时完成:

SET NAMES 'utf8_latvian_ci';

SELECT keyword
FROM ctest
ORDER BY CONVERT(keyword USING ucs2) COLLATE ucs2_latvian_ci,
CONVERT(keyword USING ucs2) COLLATE ucs2_bin ASC;

来源: http://laacz.lv/2010/10/28/ka-ieks-mysql-sakartot-latviesu-burtus-pareiza-seciba/