如何为每个= 0
未选中的
checkbox
值
错误:
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in
PHP:
$combined = array_combine($_POST['name'], $_POST['day']);
foreach($combined as $name => $value) {
echo $name.' => '.$value;
}
HTML:
<form method="post" action="result.php">
<p>
<input type="text" name="name[]" value="seth" />
<input type="checkbox" name="day[]" value="7" />
</p>
<p>
<input type="text" name="name[]" value="jack" />
<input type="checkbox" name="day[]" value="4" />
</p>
<p>
<input type="text" name="name[]" value="david" />
<input type="checkbox" name="day[]" value="3" />
</p>
</form>
PS:
我不会用:
<select name="day[]" size="1">
<option value="0"> Non </option>
<option value="1"> Yes </option>
</select>
答案 0 :(得分:2)
您的问题是未经检查的复选框甚至没有发送到服务器,因此除非全部检查,否则您的2 $_POST
阵列将不会排队。您应该考虑使用无线电并在name
属性中设置密钥的值。
即为每个输入执行此操作:
<form>
<p>
<input type="text" name="name[3]" value="david" />
<input type="radio" name="day[3]" value="yes" /> <label>Yes</label>
<input type="radio" name="day[3]" value="no" /><label>No</label>
</p>
</form>
然后执行print_r($_POST)
,您将看到阵列排成一列。另一种方法是进行隐藏输入(具有完全相同的name=""
,它将作为默认值。
答案 1 :(得分:1)
你走了。希望这对你有用。这可能比你希望的更多。
<强> result.php 强>
<?PHP
$days = array();
$namecount = count($_POST['name']);
for($i = 0; $i < $namecount; $i++){
$days[$i] = isset($_POST['day'][$i]) ? $_POST['day'][$i] : 0;
}
$arr = array_combine($_POST['name'], $days);
print_r($arr);
?>
<强> form.html 强>
<form method="post" action="result.php">
<p>
<input type="text" name="name[]" value="seth" />
<input type="checkbox" name="day[0]" value="7" />
</p>
<p>
<input type="text" name="name[]" value="jack" />
<input type="checkbox" name="day[1]" value="4" />
</p>
<p>
<input type="text" name="name[]" value="david" />
<input type="checkbox" name="day[2]" value="3" />
</p>
<input type='submit' value='Submit' />
</form>
答案 2 :(得分:0)
我只想到3种方式:
<input type=radio>
,这将使您可以对发送的内容进行额外控制。 (在之前的回答中给出)<input type=hidden>
,其名称与您的复选框相同,如果未选中该复选框,则会发送隐藏输入的值。 (在之前的回答中给出)