如何像Excel一样sorting日语

我想在Excel中sorting日语单词(汉字)像sortingfunction。 我已经尝试了许多方法来在PHP中sorting日语文本,但结果不是100%像在Excel中的结果。

首先。 我试图通过使用这个库( https://osdn.net/projects/igo-php/ )将汉字转换成片假名,但是一些情况与excel不一样。 我想sorting这些单词ASC

けやきの家

高森台病院

みのりの里

我的结果:

けやきの家

高森台病院

みのりの里

Excel结果:

けやきの家

みのりの里

高森台病院

其次我通过使用这个function尝试其他方式

mb_convert_kana($text, "KVc", "utf-8"); 

上面的文字sorting结果是正确的,但是它包含了一些不正确的情况

米田病院

米田病院

高森台病院

我的结果:

米田病院

米田病院

高森台病院

Excel结果:

高森台病院

米田病院

米田病院

你们有什么想法吗? (对不起我的英语不好 ) 。 谢谢

首先,日本的汉字是不可sorting的。 您可以按其代码号进行sorting,但该顺序没有意义。

您使用Igo(或任何其他形态分析库)听起来很好的解决scheme,但它不可能是完美的。 你的第一个sorting结果对我来说似乎很好。 为什么你想让他们按Excel顺序sorting?

在Excel中,如果一个单元格在用户最初在日文IME(input法编辑器)上键入时一直记住它的语音记号,那么将在sorting中使用该语音。 这意味着,由于不是所有的单元格都可能在IME上手工input,有些单元格可能没有这些汉字的读取信息。 所以在Excel上sorting汉字的结果可能是不可预测的。 (如果需要sorting的话,通常我们会添加另一个yomigana字段,用平假名或片假名,然后按该列sorting。)

第二种方法mb_convert_kana()是完全closures的。 这个function是平假名/片假名正常化,因为历史原因(全angular假名和半angular假名)有两组字母。 将该function应用于日文文本只会更改假名部分。 如果这使你的期望满意,那一定是巧合。

您必须首先定义您的客户需要什么Excel日本sorting。 如果情况清楚,我会很乐意帮助你的。

[更新]

正如op所评论的那样,mb_convert_kana()是对混合的平假名/片假名进行sorting。 为此,我build议使用php_intl Collat​​or。 例如,

 <?php // demo: Japanese(kana) sort by php_intl Collator if (version_compare(PHP_VERSION, '5.3.0', '<')) { exit ('php_intl extension is available on PHP 5.3.0 or later.'); } if (!class_exists('Collator')) { exit ('You need to install php_intl extension.'); } $collator = new Collator('ja_JP'); $textArray = [ 'カキクケコ', '日本語', 'アアト', 'Alphabet', 'アイランド', 'はひふへほ', 'あいうえお', '漢字', 'たほいや', 'さしみじょうゆ', 'Roma', 'ラリルレロ', 'アート', ]; $result = $collator->sort($textArray); if ($result === false) { echo "sort failed" . PHP_EOL; exit(); } var_dump($textArray); 

这种排列平假名/片假名混合文本数组。 结果在这里。

 array(13) { [0]=> string(8) "Alphabet" [1]=> string(4) "Roma" [2]=> string(9) "アート" [3]=> string(9) "アアト" [4]=> string(15) "あいうえお" [5]=> string(15) "アイランド" [6]=> string(15) "カキクケコ" [7]=> string(21) "さしみじょうゆ" [8]=> string(12) "たほいや" [9]=> string(15) "はひふへほ" [10]=> string(15) "ラリルレロ" [11]=> string(6) "漢字" [12]=> string(9) "日本語" } 

你不需要自己来标准化它们。 PHP(尽pipe使用php_intl扩展名)和数据库(比如MySQL)都知道如何用多种语言对字母进行sorting,所以你不需要编写它。

而且,这并没有解决原来的问题,汉字sorting。

Interesting Posts