Я хочу сортировать японские слова (кандзи) как функцию сортировки в Excel.
Я пробовал много способов сортировки японского текста в PHP, но результат не на 100% похож на результат в Excel.
Первый . Я пытался преобразовать кандзи в катакана с помощью этой библиотеки (https://osdn.net/projects/igo-php/) но в некоторых случаях это не то же самое, что Excel.
Я хочу отсортировать эти слова ASC
け や き の 家
高 森 台 病院
み の り の 里
Мой результат:
け や き の 家
高 森 台 病院
み の り の 里
Excel Результат:
け や き の 家
み の り の 里
高 森 台 病院
Во-вторых, я попробовал другой способ, используя эту функцию
mb_convert_kana($text, "KVc", "utf-8");
Результат сортировки верный с приведенным выше текстом, но в некоторых случаях он некорректен
米 田 病院
米 田 病院
高 森 台 病院
Мой результат:
米 田 病院
米 田 病院
高 森 台 病院
Excel Результат:
高 森 台 病院
米 田 病院
米 田 病院
Ребята, у вас есть идеи по этому поводу. (Извините за мой английский ) . Спасибо
Во-первых, японские кандзи не сортируются. Вы можете сортировать по его номеру, но этот порядок не имеет смысла.
Использование Igo (или любых других библиотек морфологического анализа) кажется хорошим решением, хотя оно не может быть идеальным. И ваш первый результат сортировки мне подходит. Почему вы хотите, чтобы они были отсортированы в порядке Excel?
В Excel, если ячейка продолжает запоминать свои фонетические нотации, когда пользователь первоначально набрал японский IME (редактор метода ввода), эта фонетика будет использоваться в сортировке. Это означает, что не все ячейки могут быть набраны вручную в IME, некоторые ячейки могут не иметь информации о том, как считываются эти кандзи. Так что результаты сортировки кандзи в Excel могут быть довольно непредсказуемыми. (Если сортировка серьезно необходима, обычно мы добавляем другое поле йомиганы, либо в хирагана, либо в катакана, и сортируем по этому столбцу.)
Второй метод mb_convert_kana () полностью не соответствует действительности. Эта функция заключается в нормализации хирагана / катакана, поскольку по историческим причинам существует два набора букв (кана полной ширины и кана шириной полуширины). Применение этой функции к вашим японским текстам только изменяет части каны. Если это оправдало ваши ожидания, это должно быть совпадение.
Сначала вы должны определить, какой порядок сортировки в японском Excel требуется вашему клиенту. Я буду рад помочь вам, если будет ясно.
[Обновить]Как отмечалось в op, mb_convert_kana () должна была сортировать смешанные хирагана / катакана. Для этого я предлагаю использовать php_intl Collator. Например,
<?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 (хотя и с расширением php_intl), и база данных (например, MySQL) знают, как сортировать алфавиты во многих языках, поэтому вам не нужно их писать.
И это не решает исходную проблему, вроде кандзи.
Других решений пока нет …