• ベストアンサー

配列で指定した値のみをMySQLからループで呼び出す方法

MySQLから呼び出す際の下記のような書式を簡略化したいと思っています。 $test = $row['test']; アドバイスのほどよろしくお願いいたします。 /* 以下ソース */ $field =array('a','b','c','d','e','f'); function ROW_DATA(){ grobal $field; foreach($field as $key => $val){ return $key = $row['$key']; } } $sql = "SELECT * FROM data"; $rs = mysql_query($sql); while($row = mysql_fetch_array($rs)) { ROW_DATA(); }

質問者が選んだベストアンサー

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (766/5720)
回答No.3

単純に、 $test = $row['test']; とか $a= $row['a']; $b= $row['b']; とかを書きたくないと言うのでしたら、 extract($row); と記述するだけで、 $testと言う変数に$row['test']の値が代入され、 $a と言う変数に $row['a'] の値が代入され、 $b と言う変数に $row['b'] の値が代入されます。 問題とされるのは、$rowの要素すべてではなく、 指定した要素のみを展開したいと言う点にあるのでしょうか。 でしたら、このような方法でどうでしょうか。 動作を確認してみてください。 function row_field_select($r,$f){ $ff=array(); foreach($f as $v){ $ff[$v]=$r[$v]; } return $ff; } $row['a']="aの値"; $row['b']="bの値"; $row['c']="cの値"; $field = array('a','c'); $rrow=row_field_select($row,$field); extract($rrow); echo $a; echo $b; echo $c; $rowの中から必要なフィールドだけを$rrowにコピーします。 この例では a と c だけになり b は省かれます。 $rrowをextractで展開します。 展開された変数は $a と $c だけで $b は何も表示されません。 組み込むと、ループの中で、2行の記述になると思います。 while($row = mysql_fetch_array($rs)) { $rrow=row_field_select($row,$field); extract($rrow); //$a $b $c などを利用する処理 }

program_
質問者

お礼

ご回答ありがとうございました。 問題は解決しました。 extractの存在を知りませんでした…。 みなさん、ありがとうございました。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>登録する項目が変動する可能性があるため、下記のように直接 >$rowへの代入を書きたくない うーん・・・フィールド名が可変だからという理由なら 以下で、十分じゃないすか? $sql = "SELECT * FROM data"; $rs = mysql_query($sql); while($row = mysql_fetch_array($rs)) { $rows[]=$row; }

program_
質問者

補足

ご回答ありがとうございます。 フィールドからではなく、$fieldで指定した値だけを代入したいです。 $field =array('a','b','c','d','e','f'); ↓ $a= $row['a']; $b= $row['b']; $c= $row['c']; $d= $row['d']; $e= $row['e']; $f= $row['f']; 自分のイメージでは、下記のような書き方をイメージしています。 foreach($field as $key => $val){ "$".$key = $row['$key']; } 分かりにくい説明ですみません…。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

何をどうしたいのかわからないので、おかしいところだけ指摘ということで まずROW_DATA()は$row配列を参照できないのでは? 引数で渡すか、グローバルを使うか・・まぁグローバルは最後の手段 なのでなるべく排除した方がよいでしょうけど・・・。 それとreturnの使い方がへんですね returnはその箇所で抜けちゃいますよ。 しかも$key = $row['$key']を戻してどうするつもりでしょう? そもそもwhileでROW_DATA()を回してるので、簡略化になっていない と思いますが・・・

program_
質問者

お礼

ご回答ありがとうございます。 > どうしたいのか 登録する項目が変動する可能性があるため、下記のように直接$rowへの代入を書きたくないと思っています。 $a= $row['$a']; $b = $row['$b']; $c = $row['$c'];