MW211 EXIT

devlog
HTML/POST変数のname属性が配列の場合
2012年05月08日
基本的に、name属性には変数を使う。
┌──────────────────────────────────────┐
│<input type="hidden" name="a[]"      value="1"/>     →  $_POST[a]       = 1│
└──────────────────────────────────────┘
配列を使ってもよい。
┌──────────────────────────────────────┐
│<input type="hidden" name="a[1]"     value="1"/>     →  $_POST[a][1]    = 1│
└──────────────────────────────────────┘
もちろん、連想配列(添字が文字列)でもOK。
┌──────────────────────────────────────┐
│<input type="hidden" name="a['z']"   value="1"/>     →  $_POST[a]['z']  = 1│
└──────────────────────────────────────┘
配列の添字を省略すると、自動で設定してくれる。
┌──────────────────────────────────────┐
│<input type="hidden" name="a[]"      value="1"/>     →  $_POST[a][0]    = 1│
│<input type="hidden" name="a[]"      value="2"/>     →  $_POST[a][1]    = 2│
└──────────────────────────────────────┘
直前に添字があればその次に追加されていくが、
最大添字を起点としてカウントアップしていくので必ず直前の次というわけではない。
(上記のように、元々起点がなければ「0」から始まる)
「$a[] = 1;」みたいな処理と同じようなもんだ。
┌──────────────────────────────────────┐
│<input type="hidden" name="a[3]"     value="1"/>     →  $_POST[a][3]    = 1│
│<input type="hidden" name="a[]"      value="2"/>     →  $_POST[a][4]    = 2│
│<input type="hidden" name="a[1]"     value="3"/>     →  $_POST[a][1]    = 3│
│<input type="hidden" name="a[]"      value="4"/>     →  $_POST[a][5]    = 4│
└──────────────────────────────────────┘
なお、文字列の添字はそのカウントアップからは無視される。
┌──────────────────────────────────────┐
│<input type="hidden" name="a[3]"     value="1"/>     →  $_POST[a][3]    = 1│
│<input type="hidden" name="a['4']"   value="2"/>     →  $_POST[a]['4']  = 2│
│<input type="hidden" name="a[]"      value="3"/>     →  $_POST[a][4]    = 3│
└──────────────────────────────────────┘
添字が同じものが複数あれば同一と見なし、最後方が上書で優先される。
┌──────────────────────────────────────┐
│<input type="hidden" name="a[]"     value="1"/>      →  $_POST[a][0]    = 1│
│<input type="hidden" name="a[]"     value="2"/>      →      (上書される)   │
│<input type="hidden" name="a[1]"    value="3"/>      →  $_POST[a][1]    = 3│
└──────────────────────────────────────┘
これは変数の場合と同じこと。
┌──────────────────────────────────────┐
│<input type="hidden" name="a"       value="1"/>      →      (上書される)   │
│<input type="hidden" name="a"       value="2"/>      →  $_POST[a]       = 2│
└──────────────────────────────────────┘
ちなみに、変数名と配列名が同名だった場合には?
┌──────────────────────────────────────┐
│<input type="hidden" name="a"       value="1"/>      →      (上書される)   │
│<input type="hidden" name="a[]"     value="2"/>      →  $_POST[a][0]    = 2│
│<input type="hidden" name="a[]"     value="3"/>      →  $_POST[a][1]    = 3│
└──────────────────────────────────────┘
階層毎で(まるごと)上書される感じ(上記と下記がそれを物語っている)。
┌──────────────────────────────────────┐
│<input type="hidden" name="a[]"     value="1"/>      →      (上書される)   │
│<input type="hidden" name="a[]"     value="2"/>      →      (上書される)   │
│<input type="hidden" name="a"       value="3"/>      →  $_POST[a]       = 3│
└──────────────────────────────────────┘
それと多次元配列も大丈夫。
┌──────────────────────────────────────┐
│<input type="hidden" name="a[1][2]" value="1"/>      →  $_POST[a][1][2] = 1│
└──────────────────────────────────────┘
分類:HTML