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

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

高洛峰
高洛峰Original
2016-11-23 14:15:331928Durchsuche

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(&#39;Content-Type: text/html; charset=utf-8&#39;);

echo transliterator_transliterate(&#39;Any-Latin&#39;, &#39;中华有为&#39;);
//输出 zhōng huá yǒu wèi

echo transliterator_transliterate(&#39;Any-Latin; Latin-ASCII; Lower()&#39;, &#39;中华有为&#39;);
//输出 zhong hua you wei

echo transliterator_transliterate(&#39;Any-Latin; Latin-ASCII; Upper()&#39;, &#39;中华有为&#39;);
//输出 ZHONG HUA YOU WEI

echo transliterator_transliterate(&#39;Any-Latin&#39;, &#39;重阳&#39;);
//输出 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(&#39;Content-Type: text/html; charset=utf-8&#39;);
$coll = collator_create(&#39;zh_CN&#39;);
$arr = array(&#39;中国&#39;,&#39;华山&#39;,&#39;华夏&#39;,&#39;中华&#39;,&#39;重阳&#39;,&#39;重量&#39;,&#39;b&#39;,&#39;a&#39;,2,1);
collator_sort($coll, $arr);
var_export($arr);
//输出(可见汉字按照拼音排序,但不能识别多音字"重"):
array (
  0 => &#39;a&#39;,
  1 => &#39;b&#39;,
  2 => &#39;华山&#39;,
  3 => &#39;华夏&#39;,
  4 => &#39;中国&#39;,
  5 => &#39;中华&#39;,
  6 => &#39;重量&#39;,
  7 => &#39;重阳&#39;,
  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(&#39;Content-Type: text/html; charset=utf-8&#39;);
$arr = array(&#39;百度知道&#39;,&#39;阿里云&#39;,&#39;百度百科&#39;,&#39;阿里巴巴&#39;);
$coll = collator_create(&#39;zh_CN&#39;);
collator_sort($coll, $arr);
var_export($arr);
//输出 array ( 0 => &#39;阿里巴巴&#39;, 1 => &#39;阿里云&#39;, 2 => &#39;百度百科&#39;, 3 => &#39;百度知道&#39;, )
$tmp = array();
foreach($arr as $v) {
	$pinyin = transliterator_transliterate(&#39;Any-Latin; Latin-ASCII; Upper()&#39;, $v);
	$tmp[substr($pinyin, 0, 1)][] = $v;
}
var_export($tmp);
//输出
array (
  &#39;A&#39; => 
  array (
    0 => &#39;阿里巴巴&#39;,
    1 => &#39;阿里云&#39;,
  ),
  &#39;B&#39; => 
  array (
    0 => &#39;百度百科&#39;,
    1 => &#39;百度知道&#39;,
  ),
)

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(&#39;Content-Type: text/plain; charset=utf-8&#39;);
$arr = array(&#39;中国&#39;,&#39;华山&#39;,&#39;华夏&#39;,&#39;中华&#39;,&#39;重阳&#39;,&#39;重量&#39;,&#39;b&#39;,&#39;a&#39;,2,1);
natsort($arr); // 等价于 uasort($arr, function($a, $b) { return strnatcmp($a, $b); });
var_export($arr);
//输出(自然排序下汉字并没有按照拼音进行排序):
array (
  9 => 1,
  8 => 2,
  7 => &#39;a&#39;,
  6 => &#39;b&#39;,
  3 => &#39;中华&#39;,
  0 => &#39;中国&#39;,
  2 => &#39;华夏&#39;,
  1 => &#39;华山&#39;,
  5 => &#39;重量&#39;,
  4 => &#39;重阳&#39;,
)

Vergleich mehrerer Sortierungen:

<?php
header(&#39;Content-Type: text/plain; charset=utf-8&#39;);
$arr = explode(&#39; &#39;, &#39;1 11 111 112 12 121 122 a aa aaa aab ab aba abb 阿里 百度 中 中国 中国国 中国中 中中 中中国 中中中&#39;);
shuffle($arr); //打乱数组
//collator_sort(collator_create(&#39;zh_CN&#39;), $arr);
//usort($arr, function($a, $b) { return strnatcmp($a, $b); });
usort($arr, function($a, $b) { return strcmp($a, $b); });
echo implode(&#39; &#39;,$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 中 中中 中中中 中中国 中国 中国中 中国国 百度 阿里


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Vererbung von PHP-ObjektenNächster Artikel:Vererbung von PHP-Objekten