未选中的复选框不会在数组变量中获取

时间:2017-10-18 14:00:41

标签: php html checkboxlist

我希望分别在“000000”这个以下数组的复选框中获得一个字符串。

已检查= 1,未选中= 0

离。 “010101”,“100001”

$ _ POST ['check'] 方法只获取已选中复选框值,因此我得不到我想要的确切所需的模式字符串

复选框的数量可能会有所不同。

请帮助我获得“000000”字符串的确切模式。

<body>
<form action="test.php" method="POST">
    <input type="checkbox" name="check[]">
    <input type="checkbox" name="check[]">
    <input type="checkbox" name="check[]">
    <input type="checkbox" name="check[]">
    <input type="checkbox" name="check[]">
    <input type="checkbox" name="check[]">

    <input type="submit">
</form>
</body>

test.php的

<?php

$ary = $_POST['check'];
$str = '000000';
foreach ($ary as $key => $value)
{
    $str[$key] = $value? 1 : 0 ;
}
echo $str;

3 个答案:

答案 0 :(得分:1)

您可以为check分配索引,并为每个复选框提供值:

<form action="test.php" method="POST">
    <input type="checkbox" name="check[0]" value="1">
    <input type="checkbox" name="check[1]" value="1">
    <input type="checkbox" name="check[2]" value="1">
    <input type="checkbox" name="check[3]" value="1">
    <input type="checkbox" name="check[4]" value="1">
    <input type="checkbox" name="check[5]" value="1">
    <input type="submit">
</form>

所以,在test.php

$arr = str_split("000000");
echo join(array_replace($arr, $_POST['check']));

<强>解释

更新: 屏幕截图

join

答案 1 :(得分:0)

您可以使用常量来全局化最大数量的复选框$max = 6;

然后,使用显式ID

打印您的输入
<form action="test.php" method="POST">
    <? for($i = 0; $i < $max; $i++) { ?>
    <input type="checkbox" name="check[<?=$i;?>]">
    <? } ?>
    <input type="submit">
</form>

然后检查是否缺少负值

$list = array();
for($i = 0; $i < $max; $i++) {
{
    $list[] = array_key_exists($i, $_POST['check']) ? '1' : '0';
}
echo implode($list);

更新:使用Thamilan回答改善我的。

更新添加了另一种读取值的方法

$list = array_fill(0, $max, 0);
// $list = array_replace($list, $_POST['check']);
$list = $_POST['check'] + $list;
ksort($list);
echo implode($list);

更新这更清晰

<form action="test.php" method="POST">
    <? for($i = 0; $i < $max; $i++) { ?>
    <input type="hidden" name="check[<?=$i;?>]" value="0">
    <input type="checkbox" name="check[<?=$i;?>]" value="1">
    <? } ?>
    <input type="submit">
</form>

这已经按预期进行了......

echo implode($_POST['check']);

答案 2 :(得分:0)

[添加此内容以回答this comment]

要做到没有索引编号,至少需要在值中指定索引:

<form action="test.php" method="POST">
    <input type="checkbox" name="check[]" value="0">
    <input type="checkbox" name="check[]" value="1">
    <input type="checkbox" name="check[]" value="2">
    <input type="checkbox" name="check[]" value="3">
    <input type="checkbox" name="check[]" value="4">
    <input type="checkbox" name="check[]" value="5">
    <input type="submit">
</form>

所以你的test.php可以是:

$arr = str_split("000000");
$postValues = array_fill_keys($_POST['check'], 1);
echo join(array_replace($arr, $postValues));

除了这个解释之外,你还可以添加array_fill_keys来创建一个具有指定值的给定键的数组。因此,您的密钥将是您在HTML中检查的密钥,并且值已硬编码为1