我有一段我根本不满意的代码:
// Search for checkboxes ('chk-1','chk-2','chk-3'...)
foreach ($_POST as $key => $val) {
if (substr($key, 0,3) == 'chk') {
$appObj->cats[] = intval(substr($key,4,strlen($key)));
}
我真的不喜欢这个,因为$ _POST可以包含超过40个变量,我已经将逻辑应用于所有其他发布的变量。
有没有人有任何想法/解决方案来实现上述目标,而无需循环每一个$ _POST var?
答案 0 :(得分:1)
尝试在表单控件中使用name =“check []”。
<input type="checkbox" name="chk[]" value="1"> 1<br />
<input type="checkbox" name="chk[]" value="2"> 2<br />
<input type="checkbox" name="chk[]" value="3"> 3<br />
然后检查你是否有阵列。
if( !empty($_POST["chk"]) )
{
print_r($_POST["chk"]);
}
答案 1 :(得分:1)
通过foreach
运行$_POST
实际上并非犯罪行为,而且可能是执行此操作的唯一方法。
如果您已经在为其他逻辑添加内容,为什么不将它们全部放在同一个foreach
?
另外为了节省一些处理,您不需要传递strlen($key)
作为substr
中的第3个参数,只需完全排除该参数,它就会做同样的事情。
答案 2 :(得分:1)
唯一可以避免通过所有项目并使用strncmp
,strpos
或substr
进行循环的方法是将复选框构建为一个数组(让$key = 7
为示例):
<input type="checkbox" name="chk[7]" />
和php:
foreach( $_POST['chk'] as $key => $val){
$appObj->cats[] = $key;
}
这会,但它可能会造成关键的差距:
$_POST['chk'] = array(
0 => 'ON',
1 => 'ON',
7 => 'ON',
);
当有人尝试使用for
循环处理数据时,这可能会导致问题。
更好的方法就是这个:
<input type="checkbox" name="chk[]" value="7" />
<input type="checkbox" name="chk[]" value="57" />
<input type="checkbox" name="chk[]" value="1231" />
和php:
foreach( $_POST['chk'] as $arrayKey => $key){
$appObj->cats[] = $key;
}