php - 根据字母查询数据的需求 我想在表里新建一个字段保存每个汉字的首字母 mysql 中有什么语句 如何取得各汉字首字母
高洛峰
高洛峰 2017-05-24 11:31:19
0
2
716

1.有哪个php大神做过这类功能 麻烦指导下我
2.有mysql经验的 麻烦指导下我

高洛峰
高洛峰

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

全部回复(2)
phpcn_u1582

没必要用mysql跑取首字母功能吧...

PHP可以处理的。

<?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('这是中文字符串');

阿神

这样维护字母的表多大啊。。。

-- 建立汉字转换拼音函数
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 ;
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板