(PHP)配列データをスムーズにinsertする方法について


フォームのチェックボックスから配列のデータが送信されてきます。


$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回文も書き込むのは無駄が多すぎると感じています。
わかりにくい説明で申し訳ないのですが、何かもっとスムーズな方法はありませんでしょうか。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2014/07/08 11:36:28
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:watercooler No.2

回答回数289ベストアンサー獲得回数51

ポイント140pt

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);

ほかにも方法はいろいろあるわ。あとはあなた次第よ。

id:jamis

回答ありがとうございます。

なぜかわかりませんが、自身の中で繰り返しの場合はinsertは使用できないと勝手に思い込んでいました。普通に考えたらできるはずですよね (^_^;)

方法はたくさんあるんですね。勉強になりました。

2014/07/08 11:35:21

その他の回答1件)

id:pogpi No.1

回答回数428ベストアンサー獲得回数59

ポイント60pt

while文ですね。
$idx = 0;
while ($idx < $count($fruit)) {
処理($fruit[$idx])
$idx = $idx + 1;
}

id:jamis

回答ありがとうございます。

なぜかinsertは使用できないと思い込んでいました。
そうですよね。
繰り返しをすれば簡単にできますよね(^_^;)

2014/07/08 11:35:14
id:watercooler No.2

回答回数289ベストアンサー獲得回数51ここでベストアンサー

ポイント140pt

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);

ほかにも方法はいろいろあるわ。あとはあなた次第よ。

id:jamis

回答ありがとうございます。

なぜかわかりませんが、自身の中で繰り返しの場合はinsertは使用できないと勝手に思い込んでいました。普通に考えたらできるはずですよね (^_^;)

方法はたくさんあるんですね。勉強になりました。

2014/07/08 11:35:21

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません