整个过程用到了pinyin.table文件。
pinyin.php
header("Content-Type:text/html;charset=utf-8");
$letters = "";
if ($_GET) {
$cat_name = $_GET["cat_name"];
$catname = convert($cat_name);
$letters = get_letter($catname, false);
}
function get_letter($catname, $letter = true) {
return $letter ? strtolower(substr(gb2py($catname), 0, 1)) : str_replace(' ', '', gb2py($catname));
}
function gb2py($text, $exp = '') {
if(!$text) return '';
$data = array();
$tmp = @file('pinyin.table'); // 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。
if(!$tmp) return '';
$tmps = count($tmp);
for($i = 0; $i < $tmps; $i++) {
$tmp1 = explode("", $tmp[$i]);
$data[$i]=array($tmp1[0], $tmp1[1]);
}
$r = array();
$k = 0;
$textlen = strlen($text);
for($i = 0; $i < $textlen; $i++) {
$p = ord(substr($text, $i, 1));
if($p > 160) {
$q = ord(substr($text, ++$i, 1));
$p = $p*256+$q-65536;
}
if($p > 0 && $p < 160) {
$r[$k] = chr($p);
} elseif($p< -20319 || $p > -10247) {
$r[$k] = '';
} else {
for($j = $tmps-1; $j >= 0; $j--) {
if($data[$j][1]<=$p) break;
}
$r[$k] = $data[$j][0];
}
$k++;
}
return implode($exp, $r);
}
function convert($str, $from = 'utf-8', $to = 'gb2312') {
if(!$str) return '';
$from = strtolower($from);
$to = strtolower($to);
if($from == $to) return $str;
$from = str_replace('gbk', 'gb2312', $from);
$to = str_replace('gbk', 'gb2312', $to);
$from = str_replace('utf8', 'utf-8', $from);
$to = str_replace('utf8', 'utf-8', $to);
if($from == $to) return $str;
$tmp = array();
if(function_exists('iconv')) {
if(is_array($str)) {
foreach($str as $key => $val) {
$tmp[$key] = iconv($from, $to."//IGNORE", $val);
}
return $tmp;
} else {
return iconv($from, $to."//IGNORE", $str);
}
} else if(function_exists('mb_convert_encoding')) {
if(is_array($str)) {
foreach($str as $key => $val) {
$tmp[$key] = mb_convert_encoding($val, $to, $from);
}
return $tmp;
} else {
return mb_convert_encoding($str, $to, $from);
}
} else {
require_once 'convert.func.php';
return dconvert($str, $to, $from);
}
}
?>
echo $letters;
?>
pinyin.table
a-20319
ai-20317
an-20304
ang-20295
ao-20292
ba-20283
bai-20265
ban-20257
bang-20242
bao-0
bei-1
ben-6
beng-2
bi-20026
bian-20002
biao-19990
bie-19986
bin-19982
bing-19976
bo-19805
bu-19784
ca-19775
cai-19774
can-19763
cang-19756
cao-19751
ce-19746
ceng-19741
cha-19739
chai-19728
chan-19725
chang-19715
chao-19540
che-19531
chen-19525
cheng-19515
chi-19500
chong-19484
chou-19479
chu-19467
chuai-19289
chuan-19288
chuang-19281
chui-19275
chun-19270
chuo-19263
ci-19261
cong-19249
cou-19243
cu-19242
cuan-19238
cui-19235
cun-19227
cuo-19224
da-19218
dai-19212
dan-19038
dang-19023
dao-19018
de-19006
deng-19003
di-18996
dian-18977
diao-18961
die-18952
ding-18783
diu-18774
dong-18773
dou-18763
du-18756
duan-18741
dui-18735
dun-18731
duo-18722
e-18710
en-18697
er-18696
fa-18526
fan-18518
fang-18501
fei-18490
fen-18478
feng-18463
fo-18448
fou-18447
fu-18446
ga-18239
gai-18237
gan-18231
gang-18220
gao-18211
ge-18201
gei-18184
gen-18183
geng-18181
gong-18012
gou-17997
gu-17988
gua-17970
guai-17964
guan-17961
guang-17950
gui-17947
gun-17931
guo-17928
ha-17922
hai-17759
han-17752
hang-17733
hao-17730
he-17721
hei-17703
hen-17701
heng-17697
hong-17692
hou-17683
hu-17676
hua-17496
huai-17487
huan-17482
huang-17468
hui-17454
hun-17433
huo-17427
ji-17417
jia-17202
jian-17185
jiang-16983
jiao-16970
jie-16942
jin-16915
jing-16733
jiong-16708
jiu-16706
ju-16689
juan-16664
jue-16657
jun-16647
ka-16474
kai-16470
kan-16465
kang-16459
kao-16452
ke-16448
ken-16433
keng-16429
kong-16427
kou-16423
ku-16419
kua-16412
kuai-16407
kuan-16403
kuang-16401
kui-16393
kun-16220
kuo-16216
la-16212
lai-16205
lan-16202
lang-16187
lao-16180
le-16171
lei-16169
leng-16158
li-16155
lia-15959
lian-15958
liang-15944
liao-15933
lie-15920
lin-15915
ling-15903
liu-15889
long-15878
lou-15707
lu-15701
lv-15681
luan-15667
lue-15661
lun-15659
luo-15652
ma-15640
mai-15631
man-15625
mang-15454
mao-15448
me-15436
mei-15435
men-15419
meng-15416
mi-15408
mian-15394
miao-15385
mie-15377
min-15375
ming-15369
miu-15363
mo-15362
mou-15183
mu-15180
na-15165
nai-15158
nan-15153
nang-15150
nao-15149
ne-15144
nei-15143
nen-15141
neng-15140
ni-15139
nian-15128
niang-15121
niao-15119
nie-15117
nin-15110
ning-15109
niu-14941
nong-14937
nu-14933
nv-14930
nuan-14929
nue-14928
nuo-14926
o-14922
ou-14921
pa-14914
pai-14908
pan-14902
pang-14894
pao-14889
pei-14882
pen-14873
peng-14871
pi-14857
pian-14678
piao-14674
pie-14670
pin-14668
ping-14663
po-14654
pu-14645
qi-14630
qia-14594
qian-14429
qiang-14407
qiao-14399
qie-14384
qin-14379
qing-14368
qiong-14355
qiu-14353
qu-14345
quan-14170
que-14159
qun-14151
ran-14149
rang-14145
rao-14140
re-14137
ren-14135
reng-14125
ri-14123
rong-14122
rou-14112
ru-14109
ruan-14099
rui-14097
run-14094
ruo-14092
sa-14090
sai-14087
san-14083
sang-13917
sao-13914
se-13910
sen-13907
seng-13906
sha-13905
shai-13896
shan-13894
shang-13878
shao-13870
she-13859
shen-13847
sheng-13831
shi-13658
shou-13611
shu-13601
shua-13406
shuai-13404
shuan-13400
shuang-13398
shui-13395
shun-13391
shuo-13387
si-13383
song-13367
sou-13359
su-13356
suan-13343
sui-13340
sun-13329
suo-13326
ta-13318
tai-13147
tan-13138
tang-13120
tao-13107
te-13096
teng-13095
ti-13091
tian-13076
tiao-13068
tie-13063
ting-13060
tong-12888
tou-12875
tu-12871
tuan-12860
tui-12858
tun-12852
tuo-12849
wa-12838
wai-12831
wan-12829
wang-12812
wei-12802
wen-12607
weng-12597
wo-12594
wu-12585
xi-12556
xia-12359
xian-12346
xiang-12320
xiao-12300
xie-12120
xin-12099
xing-12089
xiong-12074
xiu-12067
xu-12058
xuan-12039
xue-11867
xun-11861
ya-11847
yan-11831
yang-11798
yao-11781
ye-11604
yi-11589
yin-11536
ying-11358
yo-11340
yong-11339
you-11324
yu-11303
yuan-11097
yue-11077
yun-11067
za-11055
zai-11052
zan-11045
zang-11041
zao-11038
ze-11024
zei-11020
zen-11019
zeng-11018
zha-11014
zhai-10838
zhan-10832
zhang-10815
zhao-10800
zhe-10790
zhen-10780
zheng-10764
zhi-10587
zhong-10544
zhou-10533
zhu-10519
zhua-10331
zhuai-10329
zhuan-10328
zhuang-10322
zhui-10315
zhun-10309
zhuo-10307
zi-10296
zong-10281
zou-10274
zu-10270
zuan-10262
zui-10260
zun-10256
zuo-10254
备注:新建text文件复制下面代码到文件,重命名文件名pinyin.table