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().
Volver al árbol de categoríasVolver al árbol de categorías

Comentarios

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>";
}
?>

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.

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

Fernando Reich

20/1/2010
Convertir get a post para extraer datos aspx
Buenos días

La consulta que voy a realizar no estoy seguro si tiene algo que ver con el tema del foro pero si me pueden ayudar, les estaré muy agradecido.

¿Como se puede pasar parámetros de query en la URL de una Web aspx por el método post?

Intentaré explicarme, yo quiero agregar a la url: "http://evtde.argonautanet.com/Varios/ComprobacionTelefono.aspx" algún parámetro que automáticamente agregue el dato que solicita el formulario en el textbox y que el botón Aceptar se active.

Es decir, no quiero tener que ingresar el dato que solicita la página y hacer click en el botón Aceptar.

Al hacer click en dicho botón, la página no se redirecciona a ninguna otra página por lo que no puedo invocar otro link para realizar el query en cuestión.

Con la respuesta que ustedes me den pienso capturar el contenido de los query con Excel (algo que si se hacer).

Aunque si con Excel se pudiera realizar un query de un valor específico (o personalizado) y que el botón aceptar se haga click solo, también me interesa, así como cualquier otra solución alternativa (como un script).

Estos son los principales parámetros del código aspx:

TAB T=1
URL GOTO=http://evtde.argonautanet.com/Varios/ComprobacionTelefono.aspx
FRAME F=0
TAG POS=1 TYPE=INPUT:TEXT FORM=NAME:aspnetForm ATTR=ID:ctl00_Main_txtTelefono CONTENT=12344556
ONDIALOG POS=1 BUTTON=OK CONTENT=
TAG POS=1 TYPE=INPUT:IMAGE FORM=ID:aspnetForm ATTR=ID:ctl00_Main_BtnComprobar

Saludos y gracias
FAQ relacionadas
Volver al árbol de categoríasVolver al árbol de categorías