3

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

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" }
4

2 回答 2

3

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

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

或者,如果您想基于复杂的键结构进行某种自定义排序,您可以使用usortwith作为区域设置敏感的字符串比较。strcoll

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

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

于 2013-09-27T12:04:22.653 回答
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/

于 2013-09-27T12:50:24.237 回答