PHP:用英语排序多语言字符串

时间:2014-03-30 19:55:13

标签: php sorting unicode lexicographic

我正在建立一个非英语网站,但有些数据可能包含英文。当我对列表进行排序时,例如:

sort($tags, SORT_LOCALE_STRING);

英语字符串总是排在第一位(因为拉丁字母在Unicode中的序数最低),即使我的网站主要是非英语人士。

我想有一个sort函数,以与标准PHP排序相同的方式按字典顺序对字符串进行排序,但总是在所有非英语字符串之后放置英文字符串。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的,这是作弊,但最终我这样做了:

$tags = getSomeTags();
$tags_eng = $tags_lang = [];
foreach ($tags as $tag => $value) {
    if ($tag[0] <= 'z') $tags_eng[$tag] = $value;
    else $tags_lang[$tag] = $value;
}
ksort($tags_eng); ksort($tags_lang);
$tags = $tags_lang + $tags_eng;

阵列&#34;联盟&#34;操作维护元素的顺序,因此效果很好。

请注意,重要的使用array_merge()在最后连接数组,因为如果您的字符串键看起来像一个数字(比较"9" 9),然后array_merge()会认为它是一个&#34;索引项目&#34;并会用它做奇怪的事情(将密钥重置为最早的可用索引)。

如果有人能想出更好的方法,我会喜欢它。