2017-11-22 4 views
0

Excelでソート機能のように日本語の単語(漢字)をソートしたい。 PHPで日本語のテキストを並べ替える方法はたくさんありましたが、結果はExcelのように100%の結果ではありません。Excelのように日本語を並べ替える方法

最初。私はこのlib(https://osdn.net/projects/igo-php/)を使って漢字をカタカナに変換しようとしましたが、いくつかのケースはExcelのように同じではありません。

けやきの家

高森台: 私は

けやきの家

高森台病院

みのりの里

マイ結果、これらの言葉のASCにソートしたいです病院

みのりの里

Excelの結果:

けやきの

家みのりの里

高森台病院

第二に、私はこの機能

を使用することにより、他の方法を試してみました
mb_convert_kana($text, "KVc", "utf-8"); 

ソート結果は、上記のものをテキストで正しいですが、それは正しくない

米田病院

米田病院

高森台病院

マイ結果、いくつかのケースが含まれています。

米田病院

米田病院

高森台病院

Excelの結果:

高森台病院

米田病院

米田病院

は、あなたたちはこのことについてどんな考えを持っていますか。 (私の英語は申し訳ありません)。ありがとうございます

答えて

2

まず、日本の漢字はソートできません。そのコード番号でソートすることはできますが、その順序に意味はありません。

Igo(または他の形態素解析ライブラリ)を使用すると、完璧にはできませんが、良い解決策と言えます。そして、あなたの最初の並べ替えの結果は私にとってはうまくいくようです。なぜそれらをExcelの順番でソートしたいのですか?

Excelでは、ユーザーが最初に日本語IME(入力メソッドエディタ)を入力したときにセルが発音表記を覚えている場合、その発音はソートで使用されます。つまり、IMEですべてのセルが手動で入力されるわけではないため、一部のセルではこれらの漢字の読み方に関する情報がない場合があります。 Excelで漢字を並べ替えると、結果が予測できなくなる可能性があります。 (ソートが真剣に必要な場合は、ひらがなまたはカタカナの別名フィールドを追加し、その列でソートします。)

2番目のメソッドmb_convert_kana()は完全にオフポイントです。その関数は、歴史的理由(全角かなと半角かな)によって2組の文字があるので、ひらがな/カタカナを正規化することです。あなたの日本語のテキストにその機能を適用すると、かなの部分だけが変更されます。それがあなたの期待を満足させたら、それは偶然であるに違いありません。

お客様が最初に必要とするExcelの日本語ソート順を定義する必要があります。それが明らかな場合は、お手伝いします。

[更新]

OPは、コメントmb_convert_kana(AS)の混合ひらがな/カタカナをソートすることでした。そのために、私は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(php_intl拡張子付き)とデータベース(MySQLなど)は、多くの言語でアルファベットを並べ替える方法を知っているので、書く必要はありません。

そして、これは、漢字ソートの元の問題を解決しません。

+0

ありがとうございます。私の顧客はExcelでデフォルトのソートを使用します。それは、日本語のテキストをソートするためにExcelの表音情報を使用することを意味します。実際に私はIgoを使って漢字をカタカナに変換し、mb_convert_kanaを使ってカタカナのテキストをひらがなに変換してソートします。しかし、結果の並べ替えはExcelと似ていません。それは私を混乱させる – ToujouAya

+1

Excelの表音情報は常に利用可能なわけではないので、それでソートすることは理にかなっていません。特定のロケールでソートする場合は、その背後にあるphp_intl拡張子とICUライブラリをチェックしてください。並べ替えとICUライブラリが注意を払うときに照合順序を設定することができます。データがデータベースにある場合は、データベースシステムで照合も使用できます。ひらがな/カタカナを自分で正規化する必要はありません。 – akky

+0

この「あなたが照合順序を設定するかもしれない」とはどういう意味ですか? 。この 'setlocale(LC_ALL、 'jpn'); 'を意味しました – ToujouAya

関連する問題