Encountered a problem of sorting Chinese strings. It is necessary to obtain the first letter of Chinese characters. The program can obtain the first letter of any string.
The principle is that the gb2312 encoding is sorted by pinyin. If you are not familiar with gb2312, you can take a look at the encoding method.
Source:
http://www.phpman.cn
-
- $limit=array( //gb2312 Pinyin sorting
- 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="A: This is a test program 1";
- $str= iconv("UTF-8","gb2312", $str);
- echo $str. "";
- $i=0;
- while($i $tmp=bin2hex(substr($str,$i,1));
- if($tmp> ;='B0'){ //The beginning of Chinese characters
- $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;
- }
- ?>
Copy code
|