Не отмеченные флажки не извлекаются в переменную массива

Я хочу получить строку в "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']);
Другие вопросы по тегам