Hola. Si ya has llegado hasta ese punto, te falta muy poco para dar con la solución que necesitas. En el ejemplo que puse, sólo hay que hacer unos pequeños cambios:
1. Los checks ya no los envío como un array asociativo, sino uno normalito (con números)
2. Creo un array con las n posiciones que necesito y lo inicializo todo en cero
3. Recorro el array de los checks que recibí (recordar que sólo se reciben datos de los checks seleccionados) usando un foreach para poder ver su indice también y asignar un uno en la misma posición al array que creé.
4. Uno el array en una cadena usando implode.
Este sería el resultado:
Como ves, ahí cambié el "opcX" por el valor n según su posición. Ahora, en el código php:Código:<form id="frmCheck" name="frmCheck" method="post" action="multi.php"> <p>Opcion 1 <input type="checkbox" name="miCheck[0]" id="opc1" /></p> <p>Opcion 2 <input type="checkbox" name="miCheck[1]" id="opc1" /></p> <p>Opcion 3 <input type="checkbox" name="miCheck[2]" id="opc1" /></p> <p>Opcion 4 <input type="checkbox" name="miCheck[3]" id="opc1" /></p> <p>Opcion 5 <input type="checkbox" name="miCheck[4]" id="opc1" /></p> <p>Opcion 6 <input type="checkbox" name="miCheck[5]" id="opc1" /></p> <p>Opcion 7 <input type="checkbox" name="miCheck[6]" id="opc1" /></p> <p>Opcion 8 <input type="checkbox" name="miCheck[7]" id="opc1" /></p> <p>Opcion 9 <input type="checkbox" name="miCheck[8]" id="opc1" /></p> <p>Opcion 10 <input type="checkbox" name="miCheck[9]" id="opc1" /></p> <input type="submit" value="Enviar"/>
Ahi se puede ver que guardo los datos recibidos en el array $miCheck. Luego creo el array $miArray que guardará los valores que luego pasaré a la base de datos e inicializo todas sus posiciones en cero. Pongo tantas posiciones como neecesite (según el número de checks que use). Luego recorro el array $miCheck usando un foreach, de este modo, por cada elemento del array, guardo la posición (o índice) en la variable $indice y su valor en la variable $valor. Dentro del recorrido, guardo en el array $miArray en la posición que me indique la varible $indice. Finalmente uso implode (función que une un array dentro de una cadena usando como separador la cadena que le indique en el primer argumento del llamado, que en este caso es una cadena vacia.PHP:$miCheck = $_POST["miCheck"]; print_r($miCheck); $miArray = array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0); foreach ($miCheck as $indice => $valor){ $miArray[$indice] = 1; } print_r($miArray); $cadenaFinal = implode("", $miArray); echo "<h1>$cadenaFinal</h1>";
Este es el resultado:
Como ves, en la cadena resultante quedan los checks seleccionados como un "1". La cadena debe empezarse a contar de izquierda a derecha, es decir, que el check[0] está en el primer caracter de izquierda a derecha, el check[1] en el segundo caracter y así sucesivamente. Si quieres que el orden sea de derecha a izquiera (tal como se hace con los números en binario), ashi tienes que jugar con los indices cuando estás recorriendo $miCheck.Código:Array ( [0] => on [2] => on [4] => on ) Array ( [0] => 1 [1] => 0 [2] => 1 [3] => 0 [4] => 1 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 ) <h1>1010100000</h1>
Uff... tal vez lo entiendas sin toda esa carreta que eché, pero tal vez le pueda servir a alguien más.
Saludos
Muchisimas gracias pana.....exactamente esto era lo que estaba buscando.....