PHP:当一个值为空时如何修复array_combine

时间:2011-08-22 15:47:34

标签: php arrays

如何为每个= 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>

3 个答案:

答案 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种方式:

  1. 使用相同名称移至<input type=radio>,这将使您可以对发送的内容进行额外控制。 (在之前的回答中给出)
  2. 添加另一个输入,一个隐藏的输入<input type=hidden>,其名称与您的复选框相同,如果未选中该复选框,则会发送隐藏输入的值。 (在之前的回答中给出)
  3. 使用JavaScript提交表单,并循环选中复选框以手动测试每个表单的选定状态,并将其与POST请求一起发送。