人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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




●質問者: jamis
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pogpi
●60ポイント

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


jamisさんのコメント
回答ありがとうございます。 なぜかinsertは使用できないと思い込んでいました。 そうですよね。 繰り返しをすれば簡単にできますよね(^_^;)

2 ● 井戸端さん
●140ポイント ベストアンサー

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

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


jamisさんのコメント
回答ありがとうございます。 なぜかわかりませんが、自身の中で繰り返しの場合はinsertは使用できないと勝手に思い込んでいました。普通に考えたらできるはずですよね (^_^;) 方法はたくさんあるんですね。勉強になりました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ