PHP - Query data based on letters. I want to create a new field in the table to save the first letter of each Chinese character. What statements are there in mysql? How to get the first letter of each Chinese character?
高洛峰
高洛峰 2017-05-24 11:31:19
0
2
710

1. Is there any PHP master who has done this kind of function? Please give me some guidance.
2. Anyone who has mysql experience, please give me some guidance.

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

reply all(2)
phpcn_u1582

There is no need to use mysql to run the initial letter function...

PHP can handle it.

<?php
function getfirstchar($s0){

$fchar = ord($s0{0}); 
if($fchar >= ord("A") and $fchar <= ord("z") )return strtoupper($s0{0}); 
$s1 = iconv("UTF-8","gb2312", $s0); 
$s2 = iconv("gb2312","UTF-8", $s1); 
if($s2 == $s0){$s = $s1;}else{$s = $s0;} 
$asc = ord($s{0}) * 256 + ord($s{1}) - 65536; 
if($asc >= -20319 and $asc <= -20284) return "A"; 
if($asc >= -20283 and $asc <= -19776) return "B"; 
if($asc >= -19775 and $asc <= -19219) return "C"; 
if($asc >= -19218 and $asc <= -18711) return "D"; 
if($asc >= -18710 and $asc <= -18527) return "E"; 
if($asc >= -18526 and $asc <= -18240) return "F"; 
if($asc >= -18239 and $asc <= -17923) return "G"; 
if($asc >= -17922 and $asc <= -17418) return "H"; 
if($asc >= -17417 and $asc <= -16475) return "J"; 
if($asc >= -16474 and $asc <= -16213) return "K"; 
if($asc >= -16212 and $asc <= -15641) return "L"; 
if($asc >= -15640 and $asc <= -15166) return "M"; 
if($asc >= -15165 and $asc <= -14923) return "N"; 
if($asc >= -14922 and $asc <= -14915) return "O"; 
if($asc >= -14914 and $asc <= -14631) return "P"; 
if($asc >= -14630 and $asc <= -14150) return "Q"; 
if($asc >= -14149 and $asc <= -14091) return "R"; 
if($asc >= -14090 and $asc <= -13319) return "S"; 
if($asc >= -13318 and $asc <= -12839) return "T"; 
if($asc >= -12838 and $asc <= -12557) return "W"; 
if($asc >= -12556 and $asc <= -11848) return "X"; 
if($asc >= -11847 and $asc <= -11056) return "Y"; 
if($asc >= -11055 and $asc <= -10247) return "Z"; 
return null; 

}

function pinyin1($zh){

$ret = ""; 
$s1 = iconv("UTF-8","gb2312", $zh); 
$s2 = iconv("gb2312","UTF-8", $s1); 
if($s2 == $zh){$zh = $s1;} 
for($i = 0; $i < strlen($zh); $i++){ 
    $s1 = substr($zh,$i,1); 
    $p = ord($s1); 
    if($p > 160){ 
        $s2 = substr($zh,$i++,2); 
        $ret .= getfirstchar($s2); 
    }else{ 
        $ret .= $s1; 
    } 
} 
return $ret; 

}
echo pinyin1('This is a Chinese string');

阿神

How big is the table to maintain the alphabet like this? . .

-- 建立汉字转换拼音函数
DROP FUNCTION IF EXISTS to_pinyin;
DELIMITER $
CREATE FUNCTION to_pinyin(NAME VARCHAR(255) CHARSET gbk)
RETURNS VARCHAR(255) CHARSET gbk
BEGIN
    DECLARE mycode INT;
    DECLARE tmp_lcode VARCHAR(2) CHARSET gbk;
    DECLARE lcode INT;
    DECLARE tmp_rcode VARCHAR(2) CHARSET gbk;
    DECLARE rcode INT;
    DECLARE mypy VARCHAR(255) CHARSET gbk DEFAULT '';
    DECLARE lp INT;
    SET mycode = 0;
    SET lp = 1;
    SET NAME = HEX(NAME);
    WHILE lp < LENGTH(NAME) DO
        SET tmp_lcode = SUBSTRING(NAME, lp, 2);
        SET lcode = CAST(ASCII(UNHEX(tmp_lcode)) AS UNSIGNED); 
        SET tmp_rcode = SUBSTRING(NAME, lp + 2, 2);
        SET rcode = CAST(ASCII(UNHEX(tmp_rcode)) AS UNSIGNED); 
        IF lcode > 128 THEN
            SET mycode =65536 - lcode * 256 - rcode ;
            SELECT CONCAT(mypy,pin_yin_) INTO mypy FROM t_base_pinyin WHERE CODE_ >= ABS(mycode) ORDER BY CODE_ ASC LIMIT 1;
            SET lp = lp + 4;
        ELSE
            SET mypy = CONCAT(mypy,CHAR(CAST(ASCII(UNHEX(SUBSTRING(NAME, lp, 2))) AS UNSIGNED)));
            SET lp = lp + 2;
        END IF;
    END WHILE;
    RETURN LOWER(mypy);
END;
$
DELIMITER ;
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template