2011-01-17 2 views
8

私は、配列形式のHTML入力名の使用の基礎を理解しています。PHPに投稿するHTMLフォームで、配列形式の入力フィールド名を使用するにはどうすればよいですか?

<input name='item[]' type='text' /> 

をそして私は、$ _POST配列からアイテムを取得するとき、私はそうのようにそれらを反復処理することができます:私は「アイテム」の入力変数の数と形を持っていた場合、私はそれらのそれぞれのために、このような何かを行う可能性があります:

$items = $_POST['item']; 
foreach($items as $item) { 
} 

しかし、私の質問はやや複雑です。私は、ユーザーがボタンをクリックして「1つ追加」ボタンをクリックすると、フォームの下部に新しい行が表示されます。それぞれの新しい行には、「名前」と「説明」入力が含まれています。

<input name='item[name][]' type='text' /> 
<input name='item[description][]' type='text' /> 

をそしてそのようにそれらを反復:

だから最初は、私はこれを行うだろうと思った

$items = $_POST['item']; 
foreach($items as $item) { 
    print $item['name'] . ' ' . $item['description']; 
} 

しかし、その代わりに、私は期待して、それの代わりに構造「アイテム」、作業の私が最初にというより$item['name'][0]という項目名にアクセスするような配列に変更しました。

<input name='item[][name]' type='text' /> 
<input name='item[][description]' type='text' /> 

しかし、これが各「名前」の各「説明」のではなく、各ペアをグループ化する別の「アイテム」の結果:私の入力は、このようなとして命名されたように、

だから、私はそれをひっくり返し1つの「アイテム」に

私は本当に '名前'の配列と '説明'の別の配列を持つことを嫌っています。私は '名前'と '説明'フィールドを含む各配列で '項目'の配列を好むでしょう。私のjavascriptでインデックスを生成せずにこれを達成する方法はありますか?人々はこれらを動的に追加したり削除したりできるので、JavaScriptが次のアイテムの適切なインデックスを計算することは非常に困難です。これを一般的に行う方法はありませんか?

+0

'name'の配列と' description'の配列? - 後で一緒に戻すことができます。 –

+2

@マークE:私は強迫神経症を訴えていますが、これは本当に本当にバグで、私の周りに自分の道をハックして進めることができません。他のすべての配列(データベースなど)は、最初の次元として行インデックス、2番目の次元としてプロパティ名です。 – fumplr

+2

あなたの命名の問題を克服する唯一の方法は、空の括弧の中に数字を入れることです。それは利用可能な選択の中で最悪のようですが、あなたは思いませんか? –

答えて

8

それはあなたがやりたいことはできませんが、それは場合に役立ちます、ここでそれをピースに、いくつかのコードが戻って一緒に私が(item_name[]item_description[]で)動作すると考えていることだ。持っていることについてとても悪い何

$items_desc = $_POST["item_description"]; 
$items_name = $_POST["item_name"]; 
$items = array(); 
for ($i = 0; $i < count($items_name); $i++) 
{ 
    $items[] = array("name" => $items_name[$i], "description" => $items_desc[$i]); 
} 
+1

あなたのコードブロックでフォーマットボタンを使用したため、あなたが 'pre'タグを適切に使いこなすことができませんでした。あなたが気にしないことを望みます。 – prodigitalson

+0

ありがとう!私は本当にそのようなコードを投稿する方法を実際に読むべきです... –

+0

@prodigitalson これは司会者が行動するべきか振る舞うべきです! 他人が認識できるように指摘します! – whispers

関連する問題