Quiero obtener una cadena en "000000" este patrón de la siguiente matriz de casillas de verificación, respectivamente.

marcado = 1, sin marcar = 0

ej. "010101", "100001"

Pero el método $ _POST ['check'] solo obtiene los valores de las casillas de verificación marcadas y debido a esto no obtengo la cadena de patrón requerida exacta que quiero.

El número de casillas de verificación puede variar.

Ayúdame a obtener el patrón exacto de la cadena "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;
0
Muhammad Adeel 18 oct. 2017 a las 17:00

3 respuestas

La mejor respuesta

Puede asignar índices a check y proporcionar el valor a cada casilla de verificación:

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

Entonces, en test.php:

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

Explicación:

  • str_split - Solo para inicializar una matriz vacía con valores cero
  • array_replace - Reemplace 0 s con los valores que proporcionó en la casilla de verificación HTML
  • join: une la matriz a una cadena

Actualización: Captura de pantalla

enter image description here

2
Thamilan 18 oct. 2017 a las 15:15

[Agregando esto para responder este comentario]

Para hacerlo sin numeración de índice, al menos debe especificar el índice en valor:

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

Entonces su test.php puede ser:

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

Además de esta explicación, agrega array_fill_keys para crear una matriz con las claves dadas con el valor especificado. Por lo tanto, sus claves serán las que verificó en HTML y el valor está codificado en 1.

0
Thamilan 18 oct. 2017 a las 18:11

Puede usar una constante para globalizar el número máximo de casillas de verificación $max = 6;

Luego, imprima sus entradas con una identificación explícita:

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

Luego verifique si falta uno para valores negativos

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

ACTUALIZACIÓN : Utilicé la respuesta de Thamilan para mejorar la mía.


ACTUALIZACIÓN Se agregó otra forma de leer valores

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

ACTUALIZACIÓN Esto es aún más limpio

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

Esto ya hace lo esperado ...

echo implode($_POST['check']);
0
SubjectDelta 18 oct. 2017 a las 15:14