dominios y alojamiento web en hostalia

Comprobar si una variable es un array en PHP

tengo una variable que se recojo por get, y necesito saber si esa variable es una cadena o un array para tratarla de forma diferente según el caso....

La FAQ Comprobar si una variable es un array en PHP tiene

Pertenece a la categoría:

Pregunta
tengo una variable que se recojo por get, y necesito saber si esa variable es una cadena o un array para tratarla de forma diferente según el caso. Pero no se como hacer para distinguir los casos. ¿sabe alguién como se puede comprobar si una variable es un array?


Respuesta de Jorge Molina
Con la función is_array() se puede comprobar si una variable es o no un array.




De todas maneras no se puede pasar por GET un array directamente (Por post tampoco) sino que tienes que usar funciones para en la pagina que envia convertir el array en una cadena separada por comas o por otros simbolos (como # que es de uso muy poco comun) o combinaciones de simbolos (Como -#-).




En la pagina que recibe debes hacer lo contrario (Separar de acuerdo a los simbolos usados)




Para unir puedes meter los elementos del array en un for, irles poniendo la "marca" y luego uniendolos en la cadena de texto y para separar la función explode() o split().

Complementar la respuestaComplementar la respuesta
Volver al árbol de categoríasVolver al árbol de categorías

Comentarios
Fueron enviados 4 comentarios a la faq
1 comentario no revisado
3 comentarios revisados:
Por: Fco Díaz [pAk0s]
17/8/2006
pues contrario a lo que comenta Jorge, si se pueden mandar arreglos via pos o get, ;), ojo mas no arreglos de java, si en tu cliente manejas un arreglo con java ese lo tienes que tratar antes de ser enviado por que si no te llegara una cadena depediendo del explorador sera la cadena por ejemplo si es en ie te llegara los datos como dato1,dato2,dato3 creo en firefox te llega como object o algo así, para enviar un arreglo a un script ya sea por post o get tu variable o nombre de campo deve de llevar unos "[]" al final para que tras coficar el la peticion el php te genera tus variables como arreglos mientras no tenga este nombre nunca te llegara un array siempre te llegaran cadenas, una de las formas que comentaba jorge es que se acostubra tratar los datos antes de enviarlos y ponerles al final un numero o bien concatenarlos en una sola cadena mandarlo a un campo hidden y enviarlo y luego con un explode recostruir el arreglo, esas son las primeras salidas hasta que un dia de pura casualidad me di cuenta de que si agrego el "[]" al final de mi nombre de campo se envia recibe como un arrelgo lo unico malo de este metodo es que es un poco mas dificil validad los formularios ya que no puedes hacer referencia en javascript x document.formulario.nombreCampo, por que tenes varios campos con los mismos nombres por lo cual la sentecia se buelve ambigua y el el explorador no sabra que hacer para ello se necesita hacer referia mediante los elemntos de forms.elemts[] o ponerles id distinos y recuperar los datos mediante document.getElementById('id') les dejo un ejemplo de como mandar arreglos por post o get
para saber si se trata de un arreglo usamo is_array($arreglo) esta nos retorna 1 si es arreglo si no no retorna nada


<?//Fco Díaz wariodiaz@gmail.com GNU
if(count($_GET)||count($_POST))//si recibo variables por get o post
{
if(count($_GET)){
echo "<h1><center>Variables X GET</center></h1>";
$_R=$_GET;
}
else{
echo "<h1><center>Variables X POST</center></h1>";
$_R=$_POST;
}
echo "datos es arreglo=".is_array($_R[datos])."<br>";
echo "texto es arreglo=".is_array($_R[texto])."<br>";
echo "Datos Recividos:<br>".nl2br(str_replace(" ","&nbsp;",print_r($_R,1)));
for($i=0;$i<count($_R);$i++)
echo "\$datos[$i] = ".$_R[datos][$i]."<br>";
echo "<a href=\"?\">Atras</a>";
}
else
{
echo "<html>
<head>
<title>Variables X Get O Post</title>
</head>
<body>
<h1><center>Form X Post</center></h1>
<form name=f1 action=\"\" method=post>
<table border=1>
<tr><td>Dato 1</td><td><input type=text name=datos[]></td></tr>
<tr><td>Dato 2</td><td><input type=text name=datos[]></td></tr>
<tr><td>Dato 3</td><td><input type=text name=datos[]></td></tr>
<tr><td>Dato texto</td><td><input type=text name=texto></td></tr>
<tr><td colspan=2><input type=submit value=Ok></td></tr>
</table>
</form>
<br>
<h1><center>Form X Get</center></h1>
<form name=f2 action=\"\" method=get>
<table border=1>
<tr><td>Dato 1</td><td><input type=text name=datos[]></td></tr>
<tr><td>Dato 2</td><td><input type=text name=datos[]></td></tr>
<tr><td>Dato 3</td><td><input type=text name=datos[]></td></tr>
<tr><td>Dato textp</td><td><input type=text name=texto></td></tr>
<tr><td colspan=2><input type=submit value=Ok></td></tr>
</table>
</form>
</body>
</html>";
}
?>
Por: Sixto
04/9/2006
Nombrando los campos múltiples del formulario (select multiple, checkbox) añadiendo unos corchetes al nombre(...name="dato[]"...), recibirás un array tanto si lo envías por POST como por GET. Así te evitas comprobar si se trata de un array, basta con que compruebes que el dato ha sido enviado.
Por: elo950
28/9/2007
Primero que nada disculpen por duplicar mis respuestas, pues no había leído el comentario de Juan Carlos y recién después de responder lo ley y creí conveniente contestar a su duda.
Para responder a la duda de Juan Carlos y a cualquiera que necesite resolver este tipo de problema, quisiera exponer mi experiencia, en mi caso lo utilice para pasar valores de un check por POST a un PHP para validar que por lo menos un check este seleccionado use funciones javascript les dejo el código para que puedan probarlo.
Copy paste en su servidor y listo para probar, y posteriormente adaptenlo a sus necesidades.

Atte.
elo950

<?php //Original de Fco Díaz wariodiaz@gmail.com GNU adaptado para la validacion de CHECKS por elo950

if(count($_GET)||count($_POST))//si recibo variables por get o post
{
if(count($_GET)){
echo "<h1><center>Variables X GET</center></h1>";
$_R=$_GET;
}
else{
echo "<h1><center>Variables X POST</center></h1>";
$_R=$_POST;
}
echo "CHECK es arreglo=".is_array($_R[check])."<br>";

echo "Datos Recividos:<br>".nl2br(str_replace(" ","&nbsp;",print_r($_R,1)));
for($i=0;$i<count($_R);$i++)
echo "\$datos[$i] = ".$_R[check][$i]."<br>";

}
else
{
?>
<html>
<head>
<title>Enviando Arrays por POST y Validando con PHP</title>
<script>
/* recibe el pedido de envio */
function enviar(tarea) {
enviarform(tarea);
}
/* envia el formulario */
function enviarform(tarea){
document.form.tarea.value=tarea;
try {
document.form.onsubmit();
}
catch(e){}
document.form.submit();
}
/* verifica que un check este seleccionado y cambia el valor del campo seleccionados */
function chekado(checkseleccionado){
if (checkseleccionado == true){
document.form.seleccionados.value++;
}
else {
document.form.seleccionados.value--;
}
}
</script>
</head>
<body>
<a href="javascript:if (document.form.seleccionados.value == 0){
alert('Seleccione un Check'); } else { enviar('tarea1'); }">
<img src='imagen1.png' /><br />Tarea1</a><br />
<a href="javascript:if (document.form.seleccionados.value == 0){
alert('Seleccione un Check'); } else { enviar('tarea2'); }">
<img src='imagen1.png' /><br />Tarea2</a><br />

<form name="form" action="" method="post">
<input name='check[]' type='checkbox' value='valor1' onclick='chekado(this.checked);' />
<input name='check[]' type='checkbox' value='valor2' onclick='chekado(this.checked);' />
<input name='check[]' type='checkbox' value='valor3' onclick='chekado(this.checked);' />

<input type="hidden" name="tarea" value="" />
<!--
SI TIENES VARIAS TAREAS ( eliminar, editar, etc) ESTE CAMPO SIRVE PARA Guardar la tarea que selecicones este campo lo completa la funcion javascript enviarform(tarea) y posteriormente envia el formulario la misma funcion
-->
<input type="hidden" name="seleccionados" value="" />
<!--
CAMBIA DE VALOR AL SELECCIONAR UN CHECK SI NO SE SELECCIONO NINGUNO AL TRARTAR DE ENVIAR
LA FUNCION chekado(checkseleccionado) DARA UNA ADVERTENCIA PIDIENDO QUE SE SELECCIONE UN CHECK
-->

</form>
</body>
</html>
<?php } ?>

Volver al árbol de categoríasVolver al árbol de categorías

Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...