Не отмеченные флажки не извлекаются в переменную массива
Я хочу получить строку в "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 ответа
Вы можете назначить индексы 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
,
Вы можете использовать константу для глобализации максимального количества флажков $max = 6;
Затем напечатайте ваши входные данные с явным идентификатором:
<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']);