我正在建立一个不是英文的网站,但某些数据可能包含英文。当我对列表进行排序时,例如:
sort($tags, SORT_LOCALE_STRING);
英文字符串总是排在第一位(因为拉丁字母在 Unicode 中的序数最低),即使我的网站主要面向非英语使用者。
我想要一个排序函数,以与标准 PHP 排序相同的方式按字典顺序对字符串进行排序,但始终将英文字符串放在所有非英文字符串之后。有任何想法吗?
我正在建立一个不是英文的网站,但某些数据可能包含英文。当我对列表进行排序时,例如:
sort($tags, SORT_LOCALE_STRING);
英文字符串总是排在第一位(因为拉丁字母在 Unicode 中的序数最低),即使我的网站主要面向非英语使用者。
我想要一个排序函数,以与标准 PHP 排序相同的方式按字典顺序对字符串进行排序,但始终将英文字符串放在所有非英文字符串之后。有任何想法吗?
好的,这是作弊,但最终我这样做了:
$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;
数组“联合”操作保持元素的顺序,所以效果很好。
请注意,重要的是不要在最后连接数组,array_merge()
因为如果您有看起来像数字的字符串键("9"
与最早可用索引的键)。9
array_merge()
如果有人能提出更好的方法,我会很高兴。