最近搗鼓了通過調高德地圖行政區劃api來獲取城市資訊的小demo,但做的專案有乙個功能要求通過城市首字母區分城市的功能
類似於這樣:
首先我想的是通過php來解決
實現原理是獲取漢字的ascii碼通過對比判斷然後返回漢字的首字母
獲取首字母**如下:
function getfirstcharter($str)
);if ($fchar >= ord("a") and $fchar <= ord("z")) return strtoupper($str );
$a = $str;
$val = ord($a ) * 256 + ord($a ) - 65536;
if ($val >= -20319 and $val <= -20284) return "a";
if ($val >= -20283 and $val <= -19776) return "b";
if ($val >= -19775 and $val <= -19219) return "c";
if ($val >= -19218 and $val <= -18711) return "d";
if ($val >= -18710 and $val <= -18527) return "e";
if ($val >= -18526 and $val <= -18240) return "f";
if ($val >= -18239 and $val <= -17923) return "g";
if ($val >= -17922 and $val <= -17418) return "h";
if ($val >= -17417 and $val <= -16475) return "j";
if ($val >= -16474 and $val <= -16213) return "k";
if ($val >= -16212 and $val <= -15641) return "l";
if ($val >= -15640 and $val <= -15166) return "m";
if ($val >= -15165 and $val <= -14923) return "n";
if ($val >= -14922 and $val <= -14915) return "o";
if ($val >= -14914 and $val <= -14631) return "p";
if ($val >= -14630 and $val <= -14150) return "q";
if ($val >= -14149 and $val <= -14091) return "r";
if ($val >= -14090 and $val <= -13319) return "s";
if ($val >= -13318 and $val <= -12839) return "t";
if ($val >= -12838 and $val <= -12557) return "w";
if ($val >= -12556 and $val <= -11848) return "x";
if ($val >= -11847 and $val <= -11056) return "y";
if ($val >= -11055 and $val <= -10247) return "z";
} else
}
最後檢查資料結果有很多的資料首字母獲取為空:
例如(展示部分)發現這種方法並不是很好 很多生僻一點的字的首字母並沒有獲取到
so,只好放棄另謀他路
安裝
使用 composer 安裝:
composer require "overtrue/pinyin:~4.0"
使用可用選項:pinyin_tone unicode 式音調:měi hǎo
pinyin_ascii_tone 帶數字式音調:mei3 hao3
pinyin_no_tone 無音調:mei hao
pinyin_keep_number 保留數字
pinyin_keep_english 保留英文
pinyin_keep_punctuation 保留標點
pinyin_umlaut_v 使用v代替yu, 例如:呂lyu將會轉為lv
示例:
use overtrue\pinyin\pinyin;
// 小記憶體型
$pinyin = new pinyin(); // 預設
// 記憶體型
// $pinyin = new pinyin('overtrue\pinyin\memoryfiledictloader');
// i/o型
// $pinyin = new pinyin('overtrue\pinyin\generatorfiledictloader');
//返回拼音陣列形式
$pinyin->convert('帶著希望去旅行,比到達終點更美好');
// ["dai", "zhe", "xi", "wang", "qu", "lyu", "xing", "bi", "dao", "da", "zhong", "dian", "geng", "mei", "hao"]
//返回拼音調式拼音陣列
$pinyin->convert('帶著希望去旅行,比到達終點更美好', pinyin_tone);
// ["dài","zhe","xī","wàng","qù","lǚ","xíng","bǐ","dào","dá","zhōng","diǎn","gèng","měi","hǎo"]
//返回帶數字音調陣列
$pinyin->convert('帶著希望去旅行,比到達終點更美好', pinyin_ascii_tone);
//["dai4","zhe","xi1","wang4","qu4","lyu3","xing2","bi3","dao4","da2","zhong1","dian3","geng4","mei3","hao3"]
//生成用於鏈結的拼音字串
$pinyin->permalink('帶著希望去旅行'); // dai-zhe-xi-wang-qu-lyu-xing
$pinyin->permalink('帶著希望去旅行', '.'); // dai.zhe.xi.wang.qu.lyu.xing
//返回首字元字串
$pinyin->abbr('帶著希望去旅行'); // dzxwqlx
$pinyin->abbr('帶著希望去旅行', '-'); // d-z-x-w-q-l-x
$pinyin->abbr('你好2018!', pinyin_keep_number); // nh2018
//翻譯整段文字為拼音
$pinyin->sentence('帶著希望去旅行,比到達終點更美好!');
// dai zhe xi wang qu lyu xing, bi dao da zhong dian geng mei hao!
$pinyin->sentence('帶著希望去旅行,比到達終點更美好!', pinyin_tone);
// dài zhe xī wàng qù lǚ xíng, bǐ dào dá zhōng diǎn gèng měi hǎo!
//翻譯姓名
$pinyin->name('單某某'); // ['shan', 'mou', 'mou']
$pinyin->name('單某某', pinyin_tone); // ["shàn","mǒu","mǒu"]
實戰:生僻字獲取
猋(biao)麤(cu)掱(pa)贔(bi)焺(sheng)翾(xuan)
$pinyin = new pinyin();
//輸出帶連線符的拼音字串
echo $pinyin->permalink('猋麤掱贔焺翾');
echo "
"; //輸出首字母字串
echo $pinyin->abbr('猋麤掱贔焺翾');
非特殊說明,本博所有文章均為博主原創。
c 乙個有用的漢字轉拼音類
定義拼音區編碼陣列 private static int pyvalue newint 定義陣列 private static string pyname new string 漢字轉換 public static string convert string hzstring 把漢字轉換成拼音 全拼...
放乙個漢字拼音庫
現需要乙個漢字轉為拼音的程式,於是根據微軟拼音法的庫改動一下,以應付簡單需求。有兩萬多漢字,包括簡繁體。繁體的錯誤會多一些,簡體基本無錯。多音字的處理,只取乙個。改後的已經不是拼音,而是26個小寫拉丁字母 已用正則掃瞄過 對於 於 或 律 這樣的字,處理的不統一,有的是v,有的是u。看著辦吧。總的來...
漢字轉拼音 支援20870個漢字,包含完整的多音字
為了便於在網路上的傳輸,本人想辦法寫了乙個壓縮演算法,目前這個版本是壓縮好的,帶自解壓功能 以下說明壓縮思路 理想狀態下是使用stirng.prototype.localcompare了,但是由於這玩意並不是所有瀏覽器實現都一樣,例如chrome早期的就不是按拼音排序,所以這個方案先放一邊 那網上最...