アプリ版:「スタンプのみでお礼する」機能のリリースについて

sqlの条件検索で取得した任意の配列データー(すべてひらがな)

あき、あり、いか、きのこ、けーき、たぬき、たわし・・・

を『あ行』、『か行』、・・と区切って表示したく悩んでいます。

あ行
  あき
  あり
  いか
か行
  きのこ
  けーき
た行
  たぬき
  たわし
(以下略)


行ごとにマッチする文字があるかないか判定して、SELECTをすればできないことはないのですが、それではあまりに効率が悪いような気がします。

効率のよさそうなソースがわかる方がいましたら、ぜひ教えてください。よろしくお願いします。


 

A 回答 (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'];
}

?>
    • good
    • 0
この回答へのお礼

なるほど!

if(mb_ereg("^[○-○]",$array['kana'])) $rows[$key]['gyo']='○行';をしてから、
if($pregyo!=$array['gyo']) print($array['gyo']."<br>\n"); と $pregyo=$array['gyo']; ですか。

大変参考になりました、どうもありがとうございました。



PS: なんの不具合だか、メイン部分が広告の下にきちゃってますね。画面を見た時に真っ白で何度もリロードを・・・。

お礼日時:2007/02/12 18:46

自分だったら


http://ja.wikipedia.org/wiki/%E6%9C%A8%E6%A7%8B% …
多分木を応用して使うかな。

この回答への補足

すいません。
実力不足のためどのように応用して使えばよいのかが、私にはわかりません。

補足日時:2007/02/12 18:22
    • good
    • 0

○行に関しては○行に関しては全部書く方法しか自分は知りませんが


あならそのあに続く言葉に関してはワイルドカードを使えばすむ。

この回答への補足

すいません、説明がわかりにくかったようです。

お聞きしたいのは、ワイルドカード等を使い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は『ぁ→あ』『が→か』のように濁点・小文字などは無くしています。

補足日時:2007/02/12 01:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!