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

Unchecked Check-boxes are not fetched in array variable

我想在"000000"这个模式下分别得到一个字符串,下面的复选框数组。

选中 = 1,未选中 = 0

例如。 "010101" , "100001"

但是 $_POST['check'] 方法只能获取 checked 复选框值,因此我是没有得到我想要的确切要求的模式字符串。

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

请帮助我获取 "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;

您可以使用常量来全局化复选框的最大数量$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']);

您可以为 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']));

解释:

  • str_split - 只是用零值初始化一个空数组
  • array_replace - 将 0s 替换为您在 HTML 复选框
  • 中提供的值
  • join - 将数组连接到字符串

更新: 截图

[添加这个来回答 ]

要在没有索引编号的情况下做到这一点,至少您需要在值中指定索引:

<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.