1: <?php
2:
3: 4: 5: 6: 7: 8:
9:
10: namespace Wei;
11:
12: 13: 14: 15: 16:
17: class Pinyin extends Base
18: {
19: public static $dictionary = array(
20: array('a', -20319),
21: array('ai', -20317),
22: array('an', -20304),
23: array('ang', -20295),
24: array('ao', -20292),
25: array('ba', -20283),
26: array('bai', -20265),
27: array('ban', -20257),
28: array('bang', -20242),
29: array('bao', -20230),
30: array('bei', -20051),
31: array('ben', -20036),
32: array('beng', -20032),
33: array('bi', -20026),
34: array('bian', -20002),
35: array('biao', -19990),
36: array('bie', -19986),
37: array('bin', -19982),
38: array('bing', -19976),
39: array('bo', -19805),
40: array('bu', -19784),
41: array('ca', -19775),
42: array('cai', -19774),
43: array('can', -19763),
44: array('cang', -19756),
45: array('cao', -19751),
46: array('ce', -19746),
47: array('ceng', -19741),
48: array('cha', -19739),
49: array('chai', -19728),
50: array('chan', -19725),
51: array('chang', -19715),
52: array('chao', -19540),
53: array('che', -19531),
54: array('chen', -19525),
55: array('cheng', -19515),
56: array('chi', -19500),
57: array('chong', -19484),
58: array('chou', -19479),
59: array('chu', -19467),
60: array('chuai', -19289),
61: array('chuan', -19288),
62: array('chuang', -19281),
63: array('chui', -19275),
64: array('chun', -19270),
65: array('chuo', -19263),
66: array('ci', -19261),
67: array('cong', -19249),
68: array('cou', -19243),
69: array('cu', -19242),
70: array('cuan', -19238),
71: array('cui', -19235),
72: array('cun', -19227),
73: array('cuo', -19224),
74: array('da', -19218),
75: array('dai', -19212),
76: array('dan', -19038),
77: array('dang', -19023),
78: array('dao', -19018),
79: array('de', -19006),
80: array('deng', -19003),
81: array('di', -18996),
82: array('dian', -18977),
83: array('diao', -18961),
84: array('die', -18952),
85: array('ding', -18783),
86: array('diu', -18774),
87: array('dong', -18773),
88: array('dou', -18763),
89: array('du', -18756),
90: array('duan', -18741),
91: array('dui', -18735),
92: array('dun', -18731),
93: array('duo', -18722),
94: array('e', -18710),
95: array('en', -18697),
96: array('er', -18696),
97: array('fa', -18526),
98: array('fan', -18518),
99: array('fang', -18501),
100: array('fei', -18490),
101: array('fen', -18478),
102: array('feng', -18463),
103: array('fo', -18448),
104: array('fou', -18447),
105: array('fu', -18446),
106: array('ga', -18239),
107: array('gai', -18237),
108: array('gan', -18231),
109: array('gang', -18220),
110: array('gao', -18211),
111: array('ge', -18201),
112: array('gei', -18184),
113: array('gen', -18183),
114: array('geng', -18181),
115: array('gong', -18012),
116: array('gou', -17997),
117: array('gu', -17988),
118: array('gua', -17970),
119: array('guai', -17964),
120: array('guan', -17961),
121: array('guang', -17950),
122: array('gui', -17947),
123: array('gun', -17931),
124: array('guo', -17928),
125: array('ha', -17922),
126: array('hai', -17759),
127: array('han', -17752),
128: array('hang', -17733),
129: array('hao', -17730),
130: array('he', -17721),
131: array('hei', -17703),
132: array('hen', -17701),
133: array('heng', -17697),
134: array('hong', -17692),
135: array('hou', -17683),
136: array('hu', -17676),
137: array('hua', -17496),
138: array('huai', -17487),
139: array('huan', -17482),
140: array('huang', -17468),
141: array('hui', -17454),
142: array('hun', -17433),
143: array('huo', -17427),
144: array('ji', -17417),
145: array('jia', -17202),
146: array('jian', -17185),
147: array('jiang', -16983),
148: array('jiao', -16970),
149: array('jie', -16942),
150: array('jin', -16915),
151: array('jing', -16733),
152: array('jiong', -16708),
153: array('jiu', -16706),
154: array('ju', -16689),
155: array('juan', -16664),
156: array('jue', -16657),
157: array('jun', -16647),
158: array('ka', -16474),
159: array('kai', -16470),
160: array('kan', -16465),
161: array('kang', -16459),
162: array('kao', -16452),
163: array('ke', -16448),
164: array('ken', -16433),
165: array('keng', -16429),
166: array('kong', -16427),
167: array('kou', -16423),
168: array('ku', -16419),
169: array('kua', -16412),
170: array('kuai', -16407),
171: array('kuan', -16403),
172: array('kuang', -16401),
173: array('kui', -16393),
174: array('kun', -16220),
175: array('kuo', -16216),
176: array('la', -16212),
177: array('lai', -16205),
178: array('lan', -16202),
179: array('lang', -16187),
180: array('lao', -16180),
181: array('le', -16171),
182: array('lei', -16169),
183: array('leng', -16158),
184: array('li', -16155),
185: array('lia', -15959),
186: array('lian', -15958),
187: array('liang', -15944),
188: array('liao', -15933),
189: array('lie', -15920),
190: array('lin', -15915),
191: array('ling', -15903),
192: array('liu', -15889),
193: array('long', -15878),
194: array('lou', -15707),
195: array('lu', -15701),
196: array('lv', -15681),
197: array('luan', -15667),
198: array('lue', -15661),
199: array('lun', -15659),
200: array('luo', -15652),
201: array('ma', -15640),
202: array('mai', -15631),
203: array('man', -15625),
204: array('mang', -15454),
205: array('mao', -15448),
206: array('me', -15436),
207: array('mei', -15435),
208: array('men', -15419),
209: array('meng', -15416),
210: array('mi', -15408),
211: array('mian', -15394),
212: array('miao', -15385),
213: array('mie', -15377),
214: array('min', -15375),
215: array('ming', -15369),
216: array('miu', -15363),
217: array('mo', -15362),
218: array('mou', -15183),
219: array('mu', -15180),
220: array('na', -15165),
221: array('nai', -15158),
222: array('nan', -15153),
223: array('nang', -15150),
224: array('nao', -15149),
225: array('ne', -15144),
226: array('nei', -15143),
227: array('nen', -15141),
228: array('neng', -15140),
229: array('ni', -15139),
230: array('nian', -15128),
231: array('niang', -15121),
232: array('niao', -15119),
233: array('nie', -15117),
234: array('nin', -15110),
235: array('ning', -15109),
236: array('niu', -14941),
237: array('nong', -14937),
238: array('nu', -14933),
239: array('nv', -14930),
240: array('nuan', -14929),
241: array('nue', -14928),
242: array('nuo', -14926),
243: array('o', -14922),
244: array('ou', -14921),
245: array('pa', -14914),
246: array('pai', -14908),
247: array('pan', -14902),
248: array('pang', -14894),
249: array('pao', -14889),
250: array('pei', -14882),
251: array('pen', -14873),
252: array('peng', -14871),
253: array('pi', -14857),
254: array('pian', -14678),
255: array('piao', -14674),
256: array('pie', -14670),
257: array('pin', -14668),
258: array('ping', -14663),
259: array('po', -14654),
260: array('pu', -14645),
261: array('qi', -14630),
262: array('qia', -14594),
263: array('qian', -14429),
264: array('qiang', -14407),
265: array('qiao', -14399),
266: array('qie', -14384),
267: array('qin', -14379),
268: array('qing', -14368),
269: array('qiong', -14355),
270: array('qiu', -14353),
271: array('qu', -14345),
272: array('quan', -14170),
273: array('que', -14159),
274: array('qun', -14151),
275: array('ran', -14149),
276: array('rang', -14145),
277: array('rao', -14140),
278: array('re', -14137),
279: array('ren', -14135),
280: array('reng', -14125),
281: array('ri', -14123),
282: array('rong', -14122),
283: array('rou', -14112),
284: array('ru', -14109),
285: array('ruan', -14099),
286: array('rui', -14097),
287: array('run', -14094),
288: array('ruo', -14092),
289: array('sa', -14090),
290: array('sai', -14087),
291: array('san', -14083),
292: array('sang', -13917),
293: array('sao', -13914),
294: array('se', -13910),
295: array('sen', -13907),
296: array('seng', -13906),
297: array('sha', -13905),
298: array('shai', -13896),
299: array('shan', -13894),
300: array('shang', -13878),
301: array('shao', -13870),
302: array('she', -13859),
303: array('shen', -13847),
304: array('sheng', -13831),
305: array('shi', -13658),
306: array('shou', -13611),
307: array('shu', -13601),
308: array('shua', -13406),
309: array('shuai', -13404),
310: array('shuan', -13400),
311: array('shuang', -13398),
312: array('shui', -13395),
313: array('shun', -13391),
314: array('shuo', -13387),
315: array('si', -13383),
316: array('song', -13367),
317: array('sou', -13359),
318: array('su', -13356),
319: array('suan', -13343),
320: array('sui', -13340),
321: array('sun', -13329),
322: array('suo', -13326),
323: array('ta', -13318),
324: array('tai', -13147),
325: array('tan', -13138),
326: array('tang', -13120),
327: array('tao', -13107),
328: array('te', -13096),
329: array('teng', -13095),
330: array('ti', -13091),
331: array('tian', -13076),
332: array('tiao', -13068),
333: array('tie', -13063),
334: array('ting', -13060),
335: array('tong', -12888),
336: array('tou', -12875),
337: array('tu', -12871),
338: array('tuan', -12860),
339: array('tui', -12858),
340: array('tun', -12852),
341: array('tuo', -12849),
342: array('wa', -12838),
343: array('wai', -12831),
344: array('wan', -12829),
345: array('wang', -12812),
346: array('wei', -12802),
347: array('wen', -12607),
348: array('weng', -12597),
349: array('wo', -12594),
350: array('wu', -12585),
351: array('xi', -12556),
352: array('xia', -12359),
353: array('xian', -12346),
354: array('xiang', -12320),
355: array('xiao', -12300),
356: array('xie', -12120),
357: array('xin', -12099),
358: array('xing', -12089),
359: array('xiong', -12074),
360: array('xiu', -12067),
361: array('xu', -12058),
362: array('xuan', -12039),
363: array('xue', -11867),
364: array('xun', -11861),
365: array('ya', -11847),
366: array('yan', -11831),
367: array('yang', -11798),
368: array('yao', -11781),
369: array('ye', -11604),
370: array('yi', -11589),
371: array('yin', -11536),
372: array('ying', -11358),
373: array('yo', -11340),
374: array('yong', -11339),
375: array('you', -11324),
376: array('yu', -11303),
377: array('yuan', -11097),
378: array('yue', -11077),
379: array('yun', -11067),
380: array('za', -11055),
381: array('zai', -11052),
382: array('zan', -11045),
383: array('zang', -11041),
384: array('zao', -11038),
385: array('ze', -11024),
386: array('zei', -11020),
387: array('zen', -11019),
388: array('zeng', -11018),
389: array('zha', -11014),
390: array('zhai', -10838),
391: array('zhan', -10832),
392: array('zhang', -10815),
393: array('zhao', -10800),
394: array('zhe', -10790),
395: array('zhen', -10780),
396: array('zheng', -10764),
397: array('zhi', -10587),
398: array('zhong', -10544),
399: array('zhou', -10533),
400: array('zhu', -10519),
401: array('zhua', -10331),
402: array('zhuai', -10329),
403: array('zhuan', -10328),
404: array('zhuang', -10322),
405: array('zhui', -10315),
406: array('zhun', -10309),
407: array('zhuo', -10307),
408: array('zi', -10296),
409: array('zong', -10281),
410: array('zou', -10274),
411: array('zu', -10270),
412: array('zuan', -10262),
413: array('zui', -10260),
414: array('zun', -10256),
415: array('zuo', -10254)
416: );
417:
418: public function transform($num)
419: {
420: if ($num > 0 && $num < 160) {
421: return chr($num);
422: } elseif ($num < - 20319 || $num > - 10247) {
423: return '';
424: } else {
425: for ($i = count(static::$dictionary) - 1; $i >= 0; $i--) {
426: if (static::$dictionary[$i][1] <= $num) {
427: break;
428: }
429: }
430: return static::$dictionary[$i][0];
431: }
432: }
433:
434: 435: 436: 437: 438: 439:
440: public function __invoke($word)
441: {
442: $word = iconv('utf-8', 'gb2312', $word);
443: $output = '';
444: for ($i = 0; $i < strlen($word); $i++) {
445: $letter = ord(substr($word, $i, 1));
446: if ($letter > 160) {
447: $tmp = ord(substr($word, ++$i, 1));
448: $letter = $letter * 256 + $tmp - 65536;
449: }
450: $output .= $this->transform($letter);
451: }
452: return $output;
453: }
454: }
455: