我有一个问题..我有一系列拉脱维亚语单词(即Agita Matīsa
,Āris Matisovičs
,Baiba 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 matīsa 080569-11863" } array(1) { [0]=> string(35) "aija matīsa 240938-11562" }
答案 0 :(得分:3)
将您的语言环境设置为拉脱维亚语,然后使用SORT_LOCALE_STRING标志对数组进行排序。
setlocale(LC_ALL, 'lv_LV');
sort($array, SORT_LOCALE_STRING);
或者,如果要根据复杂的键结构进行某种自定义排序,可以将usort
与strcoll
一起用作区域设置敏感的字符串比较。
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/