方法一,织梦默认有这个函数,在include/inc/inc_fun_funAdmin.PHP中.即SpGetPinyin()
但他只能得到全拼,没法得到首字母,
用法举例
$pingyin=GetPinyin($row['title'],0,1);
$a=substr(GetPinyin($row['title']),0,1);//得到拼音首字母
方法二,如果你只想得到首字母,不需要全拼,还可以用以下函数得到首字母
01 |
if (ord($row['title'])>128) { //汉字开头 |
02 |
$letter=getfirstchar2($row['title']); |
03 |
}else if(ord($row['title'])>=48 and ord($row['title'])<=57){ //数字开头 |
04 |
$letter=iconv_substr($title,0,1,'utf-8'); |
06 |
else if(ord($row['title'])>=65 and ord($row['title'])<=90){ //大写英文开头 |
07 |
$letter=iconv_substr($row['title'],0,1,'utf-8'); |
08 |
}else if(ord($row['title'])>=97 and ord($row['title'])<=122){ //小写英文开头 |
09 |
$letter=iconv_substr($row['title'],0,1,'utf-8'); |
10 |
$letter=strtoupper($letter);//字母转换成大写 |
12 |
print_r($letter);exit; |
13 |
function getfirstchar2($s0){ |
14 |
$s=iconv("UTF-8","gb2312", $s0); |
15 |
$asc=ord($s{0})*256+ord($s{1})-65536; |
16 |
if($asc>=-20319 and $asc<=-20284)return "A"; |
17 |
if($asc>=-20283 and $asc<=-19776)return "B"; |
18 |
if($asc>=-19775 and $asc<=-19219)return "C"; |
19 |
if($asc>=-19218 and $asc<=-18711)return "D"; |
20 |
if($asc>=-18710 and $asc<=-18527)return "E"; |
21 |
if($asc>=-18526 and $asc<=-18240)return "F"; |
22 |
if($asc>=-18239 and $asc<=-17923)return "G"; |
23 |
if($asc>=-17922 and $asc<=-17418)return "H"; |
24 |
if($asc>=-17417 and $asc<=-16475)return "J"; |
25 |
if($asc>=-16474 and $asc<=-16213)return "K"; |
26 |
if($asc>=-16212 and $asc<=-15641)return "L"; |
27 |
if($asc>=-15640 and $asc<=-15166)return "M"; |
28 |
if($asc>=-15165 and $asc<=-14923)return "N"; |
29 |
if($asc>=-14922 and $asc<=-14915)return "O"; |
30 |
if($asc>=-14914 and $asc<=-14631)return "P"; |
31 |
if($asc>=-14630 and $asc<=-14150)return "Q"; |
32 |
if($asc>=-14149 and $asc<=-14091)return "R"; |
33 |
if($asc>=-14090 and $asc<=-13319)return "S"; |
34 |
if($asc>=-13318 and $asc<=-12839)return "T"; |
35 |
if($asc>=-12838 and $asc<=-12557)return "W"; |
36 |
if($asc>=-12556 and $asc<=-11848)return "X"; |
37 |
if($asc>=-11847 and $asc<=-11056)return "Y"; |
38 |
if($asc>=-11055 and $asc<=-10247)return "Z"; |
|
三,如何实现文章列表中,按首字母进行归类归档排序?下面是完整代码
01 |
<div class="container padding-big"style="min-height:200px;"> |
02 |
<p>{dede:type }[field:typename/]{/dede:type}</p> |
05 |
$sql = "select arc.id,arc.writer,arc.typeid, arc.title, arc.senddate,tp.sitepath,tp.namerule,tp.
typedir from dede_archives arc left join `dede_arctype` tp on arc.typeid=tp.id where arc.
typeid=2"; |
06 |
$dsql->SetQuery($sql); |
07 |
$dsql->Execute();//执行SQL操作 |
08 |
while($row = $dsql->GetArray()){ |
09 |
//print_r($row['title']);exit; |
10 |
//$pingyin=GetPinyin($row['title'],0,1); |
11 |
$letter=substr(GetPinyin($row['title']),0,1);//取得拼音首字母 |
12 |
$letter=strtoupper($letter); |
14 |
$arr[$letter]['writer'][]=$row["writer"]; |
15 |
$arr[$letter]['url'][]=GetFileUrl($row['id'],$row['typeid'],$row['senddate'],$row['title'],0,0,$row['namerule'],$row
['typedir'],0, '',0,'',$row['sitepath']); |
16 |
$arr[$letter]['title'][]=$row["title"]; |
21 |
foreach($arr as $k=>$v){ |
24 |
echo '<div><p class="padding-left bg-eee st">'.strtoupper($k).'</p>'; |
25 |
for ($x=0; $x<count($v['title']); $x++) { |
26 |
echo '<a href="'.$v[url][$x].'"><strong>'. $v[title][$x].'</strong></a><br/><hr/>'; |
29 |
echo '<br/></div>';// print_r($b%4); |
30 |
if($b%3==0){echo '<hr></hr>';//hr{background: |
31 |
border:none;-moz-box-sizing:content-box;box-sizing:content-box;}hr.space{background:
|
|