Maison  >  Questions et réponses  >  le corps du texte

PHP - Requête de données basée sur des lettres. Je souhaite créer un nouveau champ dans le tableau pour enregistrer la première lettre de chaque caractère chinois. Quelles sont les instructions dans MySQL ? Comment obtenir la première lettre de chaque caractère chinois ?

1. Y a-t-il un maître PHP qui a réalisé ce genre de fonction ? Veuillez me guider
2. Toute personne ayant une expérience avec MySQL, veuillez me guider

.
高洛峰高洛峰2729 Il y a quelques jours698

répondre à tous(2)je répondrai

  • phpcn_u1582

    phpcn_u15822017-05-24 11:33:19

    Il n'est pas nécessaire d'utiliser MySQL pour exécuter la fonction de lettre initiale...

    PHP peut le gérer.

    <?php
    fonction 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; 

    }

    fonction 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('Ceci est une chaîne chinoise');

    répondre
    0
  • 阿神

    阿神2017-05-24 11:33:19

    Quelle est la taille de la table qui contient des lettres comme celle-ci ? . .

    -- 建立汉字转换拼音函数
    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 ;

    répondre
    0
  • Annulerrépondre