php 陣列同時包含中英文,怎麼對陣列依首個字或漢字排序
php 陣列同時包含中英文,怎麼對陣列依首個字或漢字排序
PHP有很多對陣列進行排序的函數。
例如最基本的sort
和rsort
(加上r
的代表逆序,下同);
自然排序的natsort
(自然排序就是對數字按照大小排序,而不是根據ASCII碼排序)以及根據ASCII碼忽略大小寫的natcasesort
;
保持鍵-值索引關係的asort
和arsort
;
依據鍵進行排序的ksort
和內置krsort
;可以自己寫函數來決定排序規則的
usort、
uasort和
uksort(對應沒有
u的上述函數);
還有可以對多個陣列排序,並且只保持關聯數組的鍵-值索引關係的
array_multisort。
具體請參閱文件。
<code><?php header('Content-Type: text/plain; charset=utf-8'); $arr = explode(' ', '1 11 111 112 12 121 122 a aa aaa aab ab aba abb 阿里 百度 中 中国 中国国 中国中 中中 中中国 中中中'); shuffle($arr); //打乱数组 //collator_sort(collator_create('zh_CN'), $arr); //usort($arr, function($a, $b) { return strnatcmp($a, $b); }); usort($arr, function($a, $b) { return strcmp($a, $b); }); echo implode(' ',$arr); exit(); ?> ls排序: 1 11 111 112 12 121 122 a aa aaa aab ab aba abb 阿里 百度 中 中国 中国国 中国中 中中 中中国 中中中 collator_sort(zh_CN)排序(类似Windows/Linux桌面文件管理器里的默认按名称上升排列): 1 11 12 111 112 121 122 a aa aaa aab ab aba abb 阿里 百度 中 中国 中国国 中国中 中中 中中国 中中中 strnatcmp排序: 1 11 12 111 112 121 122 a aa aaa aab ab aba abb 中 中中 中中中 中中国 中国 中国中 中国国 百度 阿里 strcmp排序: 1 11 111 112 12 121 122 a aa aaa aab ab aba abb 中 中中 中中中 中中国 中国 中国中 中国国 百度 阿里</code>
使用strcmp字串比較排序其實就已經能夠滿足你的需求.
strnatcmp自然排序跟strcmp字符串比較排序主要區別在於數字,strnatcmp處理後的數字元素是由小到大排序,存在大小關係.
而ICU擴充intl裡的簡體中文排序器collator_sort(zh_CN)排序主要能夠根據漢字的拼音進行排序,比如Ali,Baidu,ZhongGuo.感興趣還可以看下我的這篇文章PHP利用ICU擴展intl快速實現漢字轉拼音以及按拼音首字母分組排序,漢字轉拼音就一個函數的事:
<code>echo transliterator_transliterate('Any-Latin; Latin-ASCII; Upper()', '中华有为'); //输出 ZHONG HUA YOU WEI</code>