空数组未出现在 $_POST 中


Empty array not appearing in $_POST

我有一些同名的复选框,可以选中其中任何一个。用户也可以不检查任何内容。

我正在使用数组表示法:

<ul>
  <li><input type="checkbox" name="data[list][]" /> 1</li>
  <li><input type="checkbox" name="data[list][]" /> 2</li>
  <li><input type="checkbox" name="data[list][]" /> 3</li>
</ul>

但是在 _POST 美元内部,我只有在至少检查其中一个数组时才获得数组。如果没有检查它们,我不会得到一个空数组。这混淆了我的PHP表单处理程序,它应该是抽象的。我不想在其中为某些字段名称编写 ifs 代码:s

foreach($_POST['data'] as $key => $value){
  $some_object->set($key, $value); 
  // value should be empty array if nothing is checked :s
}

有没有办法只获取空数组?

纯 html 方法怎么样:

<input type="hidden" name="data[list]" value="">
<ul>
  <li><input type="checkbox" name="data[list][]" /> 1</li>
  <li><input type="checkbox" name="data[list][]" /> 2</li>
  <li><input type="checkbox" name="data[list][]" /> 3</li>
</ul>

这始终至少会返回:

"data" => array:1 [▼
   "list" => ""
]

如果没有勾选复选框而不是空数组,列表将是一个空字符串,不知道这对您来说是否足够好?

有没有办法只获取空数组?

不。如果未选中复选框,则浏览器不会发送任何内容。

但是我可以理解你想防止如果。您可以通过初始化为默认值来执行此操作。数组联合运算符可用于此:

$_POST += ['data' => []];