PHP 拉脱维亚语单词数组排序


PHP Latvian array of words 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" }

区域设置设置为拉脱维亚语,然后使用 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 - 如果这是从数据库中出来的,最好将数据库设置为处理(拉丁语-2?)字符集/排序规则,以便您可以按正确的顺序提取数据。

您应该将搭配更改为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/