- ベストアンサー
sqlのデーターを『あ行』『か行』・・と区切りたい
sqlの条件検索で取得した任意の配列データー(すべてひらがな) あき、あり、いか、きのこ、けーき、たぬき、たわし・・・ を『あ行』、『か行』、・・と区切って表示したく悩んでいます。 あ行 あき あり いか か行 きのこ けーき た行 たぬき たわし (以下略) 行ごとにマッチする文字があるかないか判定して、SELECTをすればできないことはないのですが、それではあまりに効率が悪いような気がします。 効率のよさそうなソースがわかる方がいましたら、ぜひ教えてください。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
mb_eregなどで調整する手もあります <?PHP $rows[]=Array('name'=>'安藤','kana'=>'あんどう','age'=>18); $rows[]=Array('name'=>'伊藤','kana'=>'いとう' ,'age'=>20); $rows[]=Array('name'=>'遠藤','kana'=>'えんどう','age'=>15); $rows[]=Array('name'=>'佐藤','kana'=>'さとう' ,'age'=>30); $rows[]=Array('name'=>'長野','kana'=>'ながの' ,'age'=>40); foreach($rows as $key=>$array){ if(mb_ereg("^[あ-お]",$array['kana'])) $rows[$key]['gyo']='あ行'; if(mb_ereg("^[か-こ]",$array['kana'])) $rows[$key]['gyo']='か行'; if(mb_ereg("^[さ-そ]",$array['kana'])) $rows[$key]['gyo']='さ行'; if(mb_ereg("^[た-と]",$array['kana'])) $rows[$key]['gyo']='た行'; if(mb_ereg("^[な-の]",$array['kana'])) $rows[$key]['gyo']='な行'; if(mb_ereg("^[は-ほ]",$array['kana'])) $rows[$key]['gyo']='は行'; if(mb_ereg("^[ま-も]",$array['kana'])) $rows[$key]['gyo']='ま行'; if(mb_ereg("^[や-よ]",$array['kana'])) $rows[$key]['gyo']='や行'; if(mb_ereg("^[ら-ろ]",$array['kana'])) $rows[$key]['gyo']='ら行'; } $pregyo=""; foreach($rows as $key=>$array){ if($pregyo!=$array['gyo']) print($array['gyo']."<br>\n"); print $array['name']."<br>\n"; $pregyo=$array['gyo']; } ?>
その他の回答 (2)
- toro777777
- ベストアンサー率16% (43/257)
自分だったら http://ja.wikipedia.org/wiki/%E6%9C%A8%E6%A7%8B%E9%80%A0_(%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0) 多分木を応用して使うかな。
補足
すいません。 実力不足のためどのように応用して使えばよいのかが、私にはわかりません。
- toro777777
- ベストアンサー率16% (43/257)
○行に関しては○行に関しては全部書く方法しか自分は知りませんが あならそのあに続く言葉に関してはワイルドカードを使えばすむ。
補足
すいません、説明がわかりにくかったようです。 お聞きしたいのは、ワイルドカード等を使いsqlで条件検索した後のphpでの処理になります。 例えば、データベースで以下のフィールドがあった場合。 name = 名前 kana = ひらがなでのふりがな age = 年齢 $sql = " SELECT name FROM test WHERE age='20' ORDER BY kana "; $rst = mysql_query($sql,$db); while($col= mysql_fetch_array($rst)){ print$col["name"]; } sqlをこのように発行すると、あいうえお順で名前が並びます。 安藤 伊藤 遠藤 佐藤 長野 この配列データーにPHPの処理を加えて あ行 安藤 伊藤 遠藤 さ行 佐藤 な行 長野 このように表示したいと思い質問いたしました。 配列時に処理しやすいように、INSERTの時点でkanaは『ぁ→あ』『が→か』のように濁点・小文字などは無くしています。
お礼
なるほど! if(mb_ereg("^[○-○]",$array['kana'])) $rows[$key]['gyo']='○行';をしてから、 if($pregyo!=$array['gyo']) print($array['gyo']."<br>\n"); と $pregyo=$array['gyo']; ですか。 大変参考になりました、どうもありがとうございました。 PS: なんの不具合だか、メイン部分が広告の下にきちゃってますね。画面を見た時に真っ白で何度もリロードを・・・。