中文字符串分割存入數組 中文字符串順序匹配(字符串整體相似度) php

上篇貼了自己摸索的字符串順序匹配方法 ,這裏在介紹一下處理中文字符串:
將一箇中文字符串分割存入數組(ps:公司領導教給我的,在這裏拿出來分享了),再進行順序匹配貨的相似度

/**
 * 分割字符串到數組
 * @param $string 字符串
 * @param int $len 幾個組合爲一段,默認1
 * @return array
 */
function cnstr_excision($string, $len = 1)
{
    $start = 0;
    $strlen = mb_strlen($string);                                   //mb_strlen()將字符串中文當作長度1來測算(strlen在utf8模式下會把中文當作長度3)
    while ($strlen) {
        $array[] = mb_substr($string, $start, $len, "utf8");        //將字符串中的按照“中文字符”一個一個截取出來 放進數組
        $string = mb_substr($string, $len, $strlen, "utf8");        //保存上一步截取後剩餘字符串
        $strlen = mb_strlen($string);                               //測算剩餘字符串長度
    }
    return $array;
}

中文相似度

/**
 * 中文相似度
 * @param $str 被對比的字符串
 * @param $model 對比字符串
 * @return int 按順序匹配字數返回數字
 */
function strmatch($str,$model){
    $i=0;
    $j=0;
    $num = 0;
    $result =array(0);                          //空數組預先存入一個0,防止max()報錯
    while($i<sizeof($str)){                     //$model  (j)的第一個字符和$str  (i)從第一個字符挨個比對
                                                //如果相等,(1)$num++,兩個字符串都移向後一位i++ j++,$num 存入數組 如果繼續相等,繼續(1if($str[$i]!=$model[$j]){               //如果不相等則$model 跳回第一個字符 j = 0 ,$str跳回 i+1-$num$num=0,繼續比對
            $j=0;                               //如果  不相等  $model  j依舊等於0,一直停留在當前位置    $str  i++ 直至相等或者跳出循環

            $i+=1-$num;
            $num = 0;
        }else{
            $j++;
            $i++;
            $num++;
            $result[]=$num;
        }
        if ($num==sizeof($model)){              //如果$model已經100%相似了,則跳出循環
            break;
        }
    }
    return max($result);                         //返回$model$str順序最大相似度
}

歡迎大家指正交流,謝謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章