注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

牧野流星

每个人心中都有一个梦想..........

 
 
 

日志

 
 

php 获取中文字符串首字母  

2013-10-14 11:34:24|  分类: PHP |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
数据库里面有一张表,全部都是中文字符命名。使用的时候有很多不便,考虑了一下决定换成英文字符,但又不想改表的结构,在网上找了一下,发现有这种方法,自己又稍微改进了下,封装成了一个类。使用的时候更方便。
网络版本:

----------------------------------
$limit=array( //gb2312 拼音排序
    array(45217,45252), //A
    array(45253,45760), //B
    array(45761,46317), //C
    array(46318,46825), //D
    array(46826,47009), //E
    array(47010,47296), //F
    array(47297,47613), //G
    array(47614,48118), //H
    array(0,0),         //I
    array(48119,49061), //J
    array(49062,49323), //K
    array(49324,49895), //L
    array(49896,50370), //M
    array(50371,50613), //N
    array(50614,50621), //O
    array(50622,50905), //P
    array(50906,51386), //Q
    array(51387,51445), //R
    array(51446,52217), //S
    array(52218,52697), //T
    array(0,0),         //U
    array(0,0),         //V
    array(52698,52979), //W
    array(52980,53688), //X
    array(53689,54480), //Y
    array(54481,55289), //Z
);
 
$str="客车专用题";
$str= iconv("UTF-8","gb2312", $str);
echo $str."</br>";
$i=0;
while($i<strlen($str) ) {
    $tmp=bin2hex(substr($str,$i,1));
    if($tmp>='B0'){ //汉字的开始
        $t=getLetter(hexdec(bin2hex(substr($str,$i,2))));
        printf("%c",$t==-1 ? '*' : $t );
        $i+=2;
    }
    else{
        printf("%s",substr($str,$i,1));
        $i++;
    }
}
 
function getLetter($num){
    global $limit;
    $char_index=65;
    foreach($limit as $k=>$v){
        if($num>=$v[0] && $num<=$v[1]){
            $char_index+=$k;
            return $char_index;
        }
    }
    return -1;
}
-------------------------------------------------

改进版本
----------------------------------------------
<?php
//获取中文字符首字母
class getZhWords{
function __construct($str=null){
$this->str = $str;
}

function getLimit(){
$limit = array( //gb2312 拼音排序
array(45217,45252), //A
array(45253,45760), //B
array(45761,46317), //C
array(46318,46825), //D
array(46826,47009), //E
array(47010,47296), //F
array(47297,47613), //G
array(47614,48118), //H
array(0,0),         //I
array(48119,49061), //J
array(49062,49323), //K
array(49324,49895), //L
array(49896,50370), //M
array(50371,50613), //N
array(50614,50621), //O
array(50622,50905), //P
array(50906,51386), //Q
array(51387,51445), //R
array(51446,52217), //S
array(52218,52697), //T
array(0,0),         //U
array(0,0),         //V
array(52698,52979), //W
array(52980,53688), //X
array(53689,54480), //Y
array(54481,55289), //Z
);
return $limit;
}

function getWords($str){
$str= iconv("UTF-8","gb2312", $str);
$i=0;
while($i<strlen($str)){
$tmp=bin2hex(substr($str,$i,1));
if($tmp>='B0'){ //汉字的开始
$t=$this->getLetter(hexdec(bin2hex(substr($str,$i,2))));
$value[] = sprintf("%c",$t==-1 ? '*' : $t );
$i+=2;
}
else{
$value[] = sprintf("%s",substr($str,$i,1));
$i++;
}
}
$result = implode('',$value); ;
return $result;
}

function getLetter($num){
$limit = $this->getLimit();
$char_index=65;
foreach($limit as $k=>$v){
if($num>=$v[0] && $num<=$v[1]){
$char_index+=$k;
return $char_index;
}
}
return -1;
}
function __toString(){
$result = $this->getWords($this->str);
return "$result";
}

}

//使用方法
$getZhWords = new getZhWords("仪表灯");
echo $getZhWords;
?>
  评论这张
 
阅读(882)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018