50音での検索処理にて濁音・半濁音もできるやり方

問題:通常カナの比較検索にて、濁音に対応されていない。それも対応するロジックを作成したい。

例:コを利用し、ゴで始まった単語も検索できる。
ハを利用し、バ・パで始まった単語も検索できる。

1、画面から入力された単語から50音検索用カナの引き出し

要するに濁音「ゴ」を「コ」と「”」に変換し「シャ」を「シ」と「ヤ」に変換してから検索するような感じ

//判定用の配列
$array = array(‘あ’・・・);

$str = ‘パズル’;

//全角カタカナを半角カタカナに変換
$str = mb_convert_kana($str, ‘k’, ‘UTF-8′);

//半角カタカナを全角ひらがなに変換
$str = mb_convert_kana($str, ‘H’, ‘UTF-8′);

//先頭の1文字を取得
$str = mb_substr($str1, 0, 1);

//配列の中に該当する文字があるかどう

2、SQLで特定カラムから50音検索用参照を引き出し

SQLで検索する際に、左から1番目のカナを参照
SELECT * FROM table WHERE LEFT(kana,1) BETWEEN ‘カ’ AND ‘コ’

※BETWEENの間に濁音も含まれているため、SQLの場合そのままできるよう。LEFT関数でシャのような発音を自動的に「シ」のみを取り出すことができる。

問題:1音に対する検索がうまくできない。

ここで、50音に対するリストを作成する必要がある。つまり

‘ア’ => [‘ア’],
‘イ’ => [‘イ’],
‘ウ’ => [‘ウ’,’ヴ’],
‘エ’ => [‘エ’],
‘オ’ => [‘オ’],
‘カ’ => [‘カ’,’ガ’],
‘キ’ => [‘キ’,’ギ’],
‘ク’ => [‘ク’,’グ’],
‘ケ’ => [‘ケ’,’ゲ’],
‘コ’ => [‘コ’,’ゴ’],
‘サ’ => [‘サ’,’ザ’],
‘シ’ => [‘シ’,’ジ’],
‘ス’ => [‘ス’,’ズ’],
‘セ’ => [‘セ’,’ゼ’],
‘ソ’ => [‘ソ’,’ゾ’],
‘タ’ => [‘タ’,’ダ’],
‘チ’ => [‘チ’,’ヂ’],
‘ツ’ => [‘ツ’,’ヅ’],
‘テ’ => [‘テ’,’デ’],
‘ト’ => [‘ト’,’ド’],
‘ナ’ => [‘ナ’],
‘ニ’ => [‘ニ’],
‘ヌ’ => [‘ヌ’],
‘ネ’ => [‘ネ’],
‘ノ’ => [‘ノ’],
‘ハ’ => [‘ハ’,’バ’,’パ’],
‘ヒ’ => [‘ヒ’,’ビ’,’ピ’],
‘フ’ => [‘フ’,’ブ’,’プ’],
‘ヘ’ => [‘ヘ’,’ベ’,’ペ’],
‘ホ’ => [‘ホ’,’ボ’,’ポ’],
‘マ’ => [‘マ’],
‘ミ’ => [‘ミ’],
‘ム’ => [‘ム’],
‘メ’ => [‘メ’],
‘モ’ => [‘モ’],
‘ヤ’ => [‘ヤ’],
‘ユ’ => [‘ユ’],
‘ヨ’ => [‘ヨ’],
‘ラ’ => [‘ラ’],
‘リ’ => [‘リ’],
‘ル’ => [‘ル’],
‘レ’ => [‘レ’],
‘ロ’ => [‘ロ’],
‘ワ’ => [‘ワ’],
‘ヲ’ => [‘ヲ’],
‘ン’ => [‘ン’],

で該当音に対する範囲でBETWEENをかけばいい。

参照:

http://liginc.co.jp/programmer/archives/240

http://www.php.net/manual/ja/function.mb-convert-kana.php

Comments are closed.