1. 程式人生 > >通過拼音來搜尋對應的漢字欄位

通過拼音來搜尋對應的漢字欄位

最近在做一個專案,專案中會用到搜尋的功能,就是通過輸入拼音來搜尋對於的視訊,我們的視訊在資料表中的名字都是漢字,現在要實現的功能就是要讓使用者輸入拼音(包括首字母和全拼)可以查詢到對於的漢字,比如我要搜尋“會說話的湯姆貓”,我輸入hsh可以找到,輸入huishuohuo也可以找到。
開始的時候我想的是,我可能需要在資料表中加兩個欄位,一個是視訊名字的全拼,一個是視訊名字的首字母,這樣雖然很簡單,但是有一個缺點就是維護起來很麻煩,而且也打不到以空間換時間的目的。調整思路想著用一個欄位來儲存,但是儲存全拼還是首字母有犯難了,儲存全拼,別人用首字母搜尋怎麼辦。儲存首字母,別人輸全拼也搜不出來了。想了半天,最後想出了一個這樣的解決方案,在表裡面加一個欄位,儲存全拼,但是每一個音的首字母大寫,比如說會說話的湯姆貓,我會儲存”HuiShuoHuaDeTangMuMao”,然後就是寫程式碼來搜尋了,這個地方我用PHP來實現。
這裡寫程式碼片


function get_vedio_info(letter){letter_arr = str_split(strtoupper(letter));sql_suffix = ”;
foreach(letterarrasvalue){
sqlsuffix.=value.’[a-z]+’;
}
sql="selectfromresvediowherebinarypinyinREGEXP".sql_suffix.”’ union select * from res_vedio where pinyin REGEXP ‘^”.letter.
;
rows=this>db>query(sql);
if (count(rows>resultarray()==0)$res[info]=NoDataAvailable;else$res[info]=$row>resultarray();returnres;
}

就這樣就可以根據輸入的字母或者全拼得到想要的結果了。
我雖然這樣實現了,但是有一個問題就是儲存的時候怎麼寫進去呢,難道要手工一個個在後臺加進去嗎,前期資料量少一點還好,後期資料量大的時候再這樣加顯然很費事,所以我繼續思考和搜尋答案,想到了新的方法,網上有可以將漢字轉換成拼音的原始碼(),但是沒能實現將每個音首字母大寫,那怎麼辦呢,我是這樣想的,將他的程式碼稍稍改進一下,轉換的時候每個漢字為一個單位,轉換成拼音後使用ucfirst()將首字母大寫,這樣就實現了把每個視訊的名字拼音化。

雖然,這樣實現了我想要的功能,但我總覺得這種形式不是很完美。希望有過相關研究的大俠發表一下自己的解決方案.