2013-11-25 21 views
36

ように私は私が私が知っている$ _POST出力はHTML/PHP - フォーム - 入力配列

Array ( 
    [1] => Array ([level] => 1 [build_time] => 123) 
    [2] => Array ([level] => 2 [build_time] => 456) 
) 

のような配列であるように私はしたいのですがこれは何

<form> 
<input type="text" class="form-control" placeholder="Titel" name="levels[level]"> 
<input type="text" class="form-control" placeholder="Titel" name="levels[build_time]"> 

<input type="text" class="form-control" placeholder="Titel" name="levels[level]"> 
<input type="text" class="form-control" placeholder="Titel" name="levels[build_time]"> 

</form> 

のような形を得ましたname = "levels [1] [build_time]"などのようにすることができますが、これらの要素が動的に追加されるため、インデックスを追加するのは難しいでしょう。他の方法はありますか?

EDIT:

示唆したように、私は自分のフォームを変更しました。私はここで何かが欠けていると思うので、今私のHTML全体を含めました。今私のHTML:

<div class="form-group"> 
    <label class="col-md-2">Name(z.B. 1)</label> 
    <div class="col-md-10"> 
    <input type="text" class="form-control" placeholder="Titel" name="levels[][level]"> 
    </div> 

    <label class="col-md-2">Bauzeit(In Sekunden)</label> 
    <div class="col-md-10"> 
    <input type="text" class="form-control" placeholder="Titel" name="levels[][build_time]"> 
    </div> 
</div> 

<div class="form-group"> 
    <label class="col-md-2">Name(z.B. 1)</label> 
    <div class="col-md-10"> 
    <input type="text" class="form-control" placeholder="Titel" name="levels[][level]"> 
    </div> 

    <label class="col-md-2">Bauzeit(In Sekunden)</label> 
    <div class="col-md-10"> 
    <input type="text" class="form-control" placeholder="Titel" name="levels[][build_time]"> 
    </div> 
</div> 

私は今取得出力は次のようになります。

[levels] => Array ( 
    [0] => Array ([level] => 1) 
    [1] => Array ([build_time] => 234) 
    [2] => Array ([level] => 2) 
    [3] => Array ([build_time] => 456) 
) 

編集2:あなたの編集で示唆したように

、私は自分のフォームを編集しに角括弧を移動名前の終わり。私は今取得出力は次のようになります。

[levels] => Array ( 
    [level] => Array ( 
    [0] => 1 
    [1] => 2 
) 
    [build_time] => Array ( 
    [0] => 234 
    [1] => 456 
) 
) 

私はそれがちょっとうまくいくと思いますが、それはまだ複雑に見えます。良い方法はありませんか?

答えて

57

だけで、そのテンプレートを取る

<input type="text" class="form-control" placeholder="Titel" name="levels[level][]"> 
<input type="text" class="form-control" placeholder="Titel" name="levels[build_time][]"> 

のようにそれらの名前に[]を追加し、あなたも、ループを使用して、それらを追加することができます。

インデックスを提供することなく、必要なだけ動的に追加することができます。予想されるシナリオの例のように、PHPがそれらを選択します。

編集

私は新しい配列要素として、すべての新しい価値を作ることになる、間違った場所にかっこを持っていた申し訳ありません。更新されたコードを使用すると、次の配列構造が得られます。

levels > level (Array) 
levels > build_time (Array) 

両方のサブアレイの同じインデックスがペアになります。空のPOST変数を持っている人のための 、これは使用しないでください:例以外に

echo $levels["level"][5]; 
echo $levels["build_time"][5]; 
+0

私の編集を見てください、私は間違っていますか? –

+0

申し訳ありませんが、間違った場所に角括弧があります。私の新しい編集のように名前の最後に移動してください。 –

+0

私はあなたの投稿をもう一度編集しました:)私は今でも同じ構造を持っていますが、それはまだ私が元々望んでいたものではありません。それはそれを行うための最善の方法です? –

4

ため

name="[levels][level][]" 

(この例ではすでにここにあるとして)ではなく、これを使用します。

name="levels[level][]" 
15

配列がインデックスにあなたのためのOKであれば、あなたはこれを行うことができます。

<form> 
    <input type="text" class="form-control" placeholder="Titel" name="levels[0][level]"> 
    <input type="text" class="form-control" placeholder="Titel" name="levels[0][build_time]"> 

    <input type="text" class="form-control" placeholder="Titel" name="levels[1][level]"> 
    <input type="text" class="form-control" placeholder="Titel" name="levels[1][build_time]"> 

    <input type="text" class="form-control" placeholder="Titel" name="levels[2][level]"> 
    <input type="text" class="form-control" placeholder="Titel" name="levels[2][build_time]"> 
</form> 

...

[levels] => Array ( 
    [0] => Array ( 
    [level] => 1 
    [build_time] => 2 
) 
    [1] => Array ( 
    [level] => 234 
    [build_time] => 456 
) 
    [2] => Array ( 
    [level] => 111 
    [build_time] => 222 
) 
) 

をしかし、あなたは、フォームの途中からの入力(動的、私は仮定)の1ペアを削除する場合は、入力名を更新しない限り、あなたは、あなたの配列に穴を取得します...:それを達成するために

5

HTML:

<input name="levels[level][]"> 
<input name="levels[build_time][]"> 
として使用名

はPHP:

$array = filter_input_array(INPUT_POST); 
$newArray = array(); 
foreach (array_keys($array) as $fieldKey) { 
    foreach ($array[$fieldKey] as $key=>$value) { 
     $newArray[$key][$fieldKey] = $value; 
    } 
} 

$ NEWARRAYはあなたとしてデータを保持します欲しい

Array ( 
    [0] => Array ([level] => 1 [build_time] => 123) 
    [1] => Array ([level] => 2 [build_time] => 456) 
) 
+2

私はこれがなぜ落とされたのか分かりませんが、これは私が必要としていたものです。 – Dediqated

関連する問題