Heim >Backend-Entwicklung >PHP-Tutorial >PHP verwendet die ICU-Erweiterung intl, um chinesische Zeichen schnell in Pinyin umzuwandeln und durch Gruppierung und Sortierung nach dem ersten Buchstaben von Pinyin zu sortieren
ICU (International Components for Unicode) stellt einen Transliterator bereit,
der problemlos andere Sprachen (z. B. vereinfachtes Chinesisch) in die lateinische Darstellung umwandeln kann:
http://cn2.php. zh/transliterator.transliterate.php
Transliterator: Ermöglicht das Abrufen der lateinischen Darstellung von Zeichenfolgen in verschiedenen Sprachen.
<?php //文件编码要求是Unicode header('Content-Type: text/html; charset=utf-8'); echo transliterator_transliterate('Any-Latin', '中华有为'); //输出 zhōng huá yǒu wèi echo transliterator_transliterate('Any-Latin; Latin-ASCII; Lower()', '中华有为'); //输出 zhong hua you wei echo transliterator_transliterate('Any-Latin; Latin-ASCII; Upper()', '中华有为'); //输出 ZHONG HUA YOU WEI echo transliterator_transliterate('Any-Latin', '重阳'); //输出 zhòng yáng (错误,多音字还是坑)
CFStringTransform/kCFStringTransformToLatin auf Apple wird auch durch ICU-Transformation implementiert:
http:// userguide.icu-project.org/transforms/general#TOC-ICU-Transliterators
http://nshipster.com/cfstringtransform/
Verwenden Sie das vereinfachte Chinesisch von php5-intl (Abhängigkeit ICU:libicu52). (zh_CN) Sortierer Collator sortiert nach Pinyin:
http://cn2.php.net/manual/zh/collator.sort.php
php-src/ext/intl - -enable-intl --with- icu-dir=DIR
Verwandt: MySQL-Datentabellen-Sortierungsregel COLLATE=utf8_general_ci
<?php header('Content-Type: text/html; charset=utf-8'); $coll = collator_create('zh_CN'); $arr = array('中国','华山','华夏','中华','重阳','重量','b','a',2,1); collator_sort($coll, $arr); var_export($arr); //输出(可见汉字按照拼音排序,但不能识别多音字"重"): array ( 0 => 'a', 1 => 'b', 2 => '华山', 3 => '华夏', 4 => '中国', 5 => '中华', 6 => '重量', 7 => '重阳', 8 => 1, 9 => 2, )
Wenn die Elemente 1 und 2 mit Anführungszeichen hinzugefügt werden und zu Zeichenfolgentypen werden, werden 1 und 2 am Anfang angezeigt nach dem Sortieren.
Verzeichnisdateistruktur des installierten Softwarepakets anzeigen:
dpkg -L libicu52:amd64
/usr/lib/x86_64-linux-gnu/libicu*
/usr/lib/ x86_64-linux-gnu/libicudata.so.52.1 Dynamische Bibliothek 23 MB
/usr/lib/x86_64-linux-gnu/libicudata.a Statische Bibliothek 23 MB
Unter Windows:
phpicu*.dll
phpextphp_intl.dll
Das Folgende implementiert die häufig verwendete Funktion zum Gruppieren und Sortieren nach dem Anfangsbuchstaben des chinesischen Pinyin:
<?php header('Content-Type: text/html; charset=utf-8'); $arr = array('百度知道','阿里云','百度百科','阿里巴巴'); $coll = collator_create('zh_CN'); collator_sort($coll, $arr); var_export($arr); //输出 array ( 0 => '阿里巴巴', 1 => '阿里云', 2 => '百度百科', 3 => '百度知道', ) $tmp = array(); foreach($arr as $v) { $pinyin = transliterator_transliterate('Any-Latin; Latin-ASCII; Upper()', $v); $tmp[substr($pinyin, 0, 1)][] = $v; } var_export($tmp); //输出 array ( 'A' => array ( 0 => '阿里巴巴', 1 => '阿里云', ), 'B' => array ( 0 => '百度百科', 1 => '百度知道', ), )
Anhang:
ls-Befehl, Die Dateimanager von Linux und Windows werden wie folgt angezeigt:
1 2 a b Huashan Huaxia China Zhonghua Weight Chongyang
Zahlen, Buchstaben, chinesische Schriftzeichen (sortiert nach Pinyin, aber multiphonetische Schriftzeichen können nicht erkannt werden)
Für chinesische Schriftzeichen gilt das Folgende Die natürliche Sortierung unterscheidet sich von der oben genannten:
<?php header('Content-Type: text/plain; charset=utf-8'); $arr = array('中国','华山','华夏','中华','重阳','重量','b','a',2,1); natsort($arr); // 等价于 uasort($arr, function($a, $b) { return strnatcmp($a, $b); }); var_export($arr); //输出(自然排序下汉字并没有按照拼音进行排序): array ( 9 => 1, 8 => 2, 7 => 'a', 6 => 'b', 3 => '中华', 0 => '中国', 2 => '华夏', 1 => '华山', 5 => '重量', 4 => '重阳', )
Vergleich mehrerer Sortierungen:
<?php header('Content-Type: text/plain; charset=utf-8'); $arr = explode(' ', '1 11 111 112 12 121 122 a aa aaa aab ab aba abb 阿里 百度 中 中国 中国国 中国中 中中 中中国 中中中'); shuffle($arr); //打乱数组 //collator_sort(collator_create('zh_CN'), $arr); //usort($arr, function($a, $b) { return strnatcmp($a, $b); }); usort($arr, function($a, $b) { return strcmp($a, $b); }); echo implode(' ',$arr); exit(); ?> ls排序: 1 11 111 112 12 121 122 a aa aaa aab ab aba abb 阿里 百度 中 中国 中国国 中国中 中中 中中国 中中中 collator_sort(zh_CN)排序(类似Windows/Linux桌面文件管理器里的默认按名称上升排列): 1 11 12 111 112 121 122 a aa aaa aab ab aba abb 阿里 百度 中 中国 中国国 中国中 中中 中中国 中中中 strnatcmp排序: 1 11 12 111 112 121 122 a aa aaa aab ab aba abb 中 中中 中中中 中中国 中国 中国中 中国国 百度 阿里 strcmp排序: 1 11 111 112 12 121 122 a aa aaa aab ab aba abb 中 中中 中中中 中中国 中国 中国中 中国国 百度 阿里