php 按汉字拼音排序,PHP数组排序关于按中文拼音排序的问题
這天做個(gè)頁面,需要將圖片表里面圖片的標(biāo)簽拉出來拆分好后去重按自然排序。結(jié)果很囧,應(yīng)該排序的結(jié)果是0-9-A-z-阿-中,但是中文部分就是很亂。再找問題,結(jié)果發(fā)現(xiàn)自然排序是按照字符編碼的順序來排列。由于當(dāng)前頁面是UTF-8編碼,UTF-8大家應(yīng)該清楚吧,我稱為是“電腦碼”,給電腦看的~汗…… 如果換成GBK或者GB2312編碼就不會(huì)這樣了,這跟漢字在字符集的編碼有關(guān)。比如”人”這個(gè)字,在GBK和GB2312中就是按它的拼音”ren”的字母順序排到第N個(gè)位置,而UTF-8編碼就不是這樣了(沒有具體研究怎么排的)。OK 知道原因就簡單了,排序前將字符轉(zhuǎn)到GBK,排序完了再轉(zhuǎn)回來就OK。
$this->db->select(‘#imgs’,”tags”,”,”);//相當(dāng)于查詢imgs表中所有的tags字段
$tags = $this->db->getAll();//獲得查詢結(jié)果
$tagslist = $tlist = array();
foreach ($tags as $tagarray){
$tag = explode(‘ ‘,$tagarray[‘tags’]);//字段是多個(gè)標(biāo)簽組成的字符串,這里分解下
foreach($tag as $t){
if(!in_array($t,$tagslist) && !empty($t)){//去重去空
$t = iconv(‘UTF-8’, ‘GBK’, $t);
$tagslist[] = $t;//得到標(biāo)簽數(shù)組,GBK編碼
}
}
}
asort($tagslist);//排序數(shù)組 ,可以用別的自然排序函數(shù)natsort,natcasesort
foreach($tagslist as $list){
$list = iconv( ‘GBK’, ‘UTF-8’,$list);
if(!in_array($list,$tlist)){//轉(zhuǎn)回來仍然要去重
$tlist[]=$list;//這里重新給個(gè)數(shù)組就是為了獲得新的KEY,后面模板輸出要用到換行
}
}
自由轉(zhuǎn)載,轉(zhuǎn)載請注明: 轉(zhuǎn)載自WEB開發(fā)筆記 www.chhua.com
本文鏈接地址: PHP數(shù)組排序關(guān)于按中文拼音排序的問題 http://www.chhua.com/web-note620
隨機(jī)筆記
更多
總結(jié)
以上是生活随笔為你收集整理的php 按汉字拼音排序,PHP数组排序关于按中文拼音排序的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python arp断网攻击_局域网ar
- 下一篇: CentOS You need to b