未选中的复选框未在数组变量中获取
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
- 将 0
s 替换为您在 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
.
我想在"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
- 将0
s 替换为您在 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
.