_<input name="foo[]">
_のようなことができることは知っていますが、_<input name="foo[bar]">
_のようなことをして、PHP as _$_POST['foo']['bar']
_として表示させることは可能ですか?
私が尋ねる理由は、フォーム要素の巨大なテーブル(複数の選択肢がある_<select>
_を含む)を作成していて、そのスクリプトのためにデータをきれいに整理したいからです。に投稿しています。各列の入力要素のベース名は同じですが、配列キーとしての行識別子は異なります。それは理にかなっていますか?
EDIT:私はすでにこれを正確に試しましたが、どうやらDrupalは私がやろうとしていることを妨害しています。私は構文が間違っていると思っていました。Firebugは言います入力名はこのように構成されていますが、データは[foo] => array([bar] => data)
ではなく_[foo[bar]] => data
_として返されます。
編集2:私の本当の問題は、Drupalの_$form_state['values']
_は_$_POST
_と同じ配列階層を持つだろうという私の仮定でした。 Drupalがそれほど合理的で直感的であるとは、決して想定していませんでした。時間を無駄にして申し訳ありません。
これはDrupalでも非常に簡単に実行できます。覚えておく必要がある重要なことは、フォームの「#tree」パラメーターをTRUEに設定することです。簡単な例を示します。
function MYMODULE_form() {
$form = array('#tree' => TRUE);
$form['group_1']['field_1'] = array(
'#type' => 'textfield',
'#title' => 'Field 1',
);
$form['group_1']['field_2'] = array(
'#type' => 'textfield',
'#title' => 'Field 2',
);
$form['group_2']['field_3'] = array(
'#type' => 'textfield',
'#title' => 'Field 3',
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
);
return $form;
}
ここで、MYMODULE_form_submit($ form、&$ form_state)でprint_r()$ form_state ['values']を実行すると、次のように表示されます。
Array
(
[group_1] => Array
(
[field_1] => abcd
[field_2] => efgh
)
[group_2] => Array
(
[field_3] => ijkl
)
[op] => Submit
[submit] => Submit
[form_build_id] => form-7a870f2ffdd231d9f76f033f4863648d
[form_id] => test_form
)
以下のフォームを使用して学生のスコアを印刷するとします。
<form action="" method="POST">
<input name="student['john']">
<input name="student['kofi']">
<input name="student['kwame']">
<input type="submit" name="submit">
</form>
およびPHPスコアを出力するコード:
if(isset($_POST['submit']))
{
echo $_POST['student']['john'] . '<br />';
echo $_POST['student']['kofi'] . '<br />';
echo $_POST['student']['kwame'] . '<br />';
}
これにより、フィールドに入力した値が出力されます。
はい、できます。あなたもすることができますname="foor[bar][]"
以降、さらにパディングします。