フォームのチェックボックスから配列のデータが送信されてきます。
例
$fruit=array("オレンジ","メロン","パイナップル")
このフルーツの配列を以下の様にデータベースに挿入したいのです。
※ひとつのレコードにひとつのフルーツ。
fruit
オレンジ
メロン
パイナップル
これだけであれば、配列をひとつひとつ取り出してから、sqlを3回か、一度で3つ書き込む形を取れば実現が可能です。
しかし、現状は、フォームから送信されるデータは配列の中の要素数が不明でばらばらです。
※1~20要素の間ではあります。
現状では、count($fruit)で要素数を割り出し、if文でその数字に適合する回数だけsqlで入れていく方法を考えています。
if(要素数1の場合){
insert~1つの要素($fruit[0])をデータベースに入れる
}
if(要素数2の場合){
insert~ 2つの要素($fruit[0],$fruit[1])をデータベースに入れる
}
しかし、これを20回文も書き込むのは無駄が多すぎると感じています。
わかりにくい説明で申し訳ないのですが、何かもっとスムーズな方法はありませんでしょうか。
count($fruit)で要素数を割り出し、if文でその数字に適合する回数だけsqlで入れていく方法を
MySQLみたいな有名なデータベースだったらINSERT1つで複数レコードの追加が可能よ。
INSERT INTO てーぶる VALUES (オレンジ),(メロン),(パイナップル)
単純なものなら1行で済むわ。
<?php $fruit = array("オレンジ","メロン","パイナップル"); $sql = "INSERT INTO てーぶる VALUES (" . implode( "),(", $fruit) . ")";
少し応用もしてみるわね。
<?php $fruit = array("オレンジ","メロン","パイナップル"); $count = count($fruit); for($i = 0;$i < $count;$i++){ $fruit[$i] = "(" . $i . "," . $fruit[$i] . ")"; } $sql = "INSERT INTO てーぶる VALUES " . implode( ",", $fruit);
SQLはこうなるわ。
INSERT INTO てーぶる VALUES (0,オレンジ),(1,メロン),(2,パイナップル)
forの代わりにarray_walkを使ってみたわ。
<?php $fruit = array("オレンジ","メロン","パイナップル"); array_walk($fruit,function(&$v, $k){$v="(" . $k . "," . $v . ")";}); $sql = "INSERT INTO てーぶる VALUES " . implode( ",", $fruit);
ほかにも方法はいろいろあるわ。あとはあなた次第よ。
while文ですね。
$idx = 0;
while ($idx < $count($fruit)) {
処理($fruit[$idx])
$idx = $idx + 1;
}
回答ありがとうございます。
なぜかinsertは使用できないと思い込んでいました。
そうですよね。
繰り返しをすれば簡単にできますよね(^_^;)
count($fruit)で要素数を割り出し、if文でその数字に適合する回数だけsqlで入れていく方法を
MySQLみたいな有名なデータベースだったらINSERT1つで複数レコードの追加が可能よ。
INSERT INTO てーぶる VALUES (オレンジ),(メロン),(パイナップル)
単純なものなら1行で済むわ。
<?php $fruit = array("オレンジ","メロン","パイナップル"); $sql = "INSERT INTO てーぶる VALUES (" . implode( "),(", $fruit) . ")";
少し応用もしてみるわね。
<?php $fruit = array("オレンジ","メロン","パイナップル"); $count = count($fruit); for($i = 0;$i < $count;$i++){ $fruit[$i] = "(" . $i . "," . $fruit[$i] . ")"; } $sql = "INSERT INTO てーぶる VALUES " . implode( ",", $fruit);
SQLはこうなるわ。
INSERT INTO てーぶる VALUES (0,オレンジ),(1,メロン),(2,パイナップル)
forの代わりにarray_walkを使ってみたわ。
<?php $fruit = array("オレンジ","メロン","パイナップル"); array_walk($fruit,function(&$v, $k){$v="(" . $k . "," . $v . ")";}); $sql = "INSERT INTO てーぶる VALUES " . implode( ",", $fruit);
ほかにも方法はいろいろあるわ。あとはあなた次第よ。
回答ありがとうございます。
なぜかわかりませんが、自身の中で繰り返しの場合はinsertは使用できないと勝手に思い込んでいました。普通に考えたらできるはずですよね (^_^;)
方法はたくさんあるんですね。勉強になりました。
回答ありがとうございます。
2014/07/08 11:35:21なぜかわかりませんが、自身の中で繰り返しの場合はinsertは使用できないと勝手に思い込んでいました。普通に考えたらできるはずですよね (^_^;)
方法はたくさんあるんですね。勉強になりました。