Foros del Web » Programando para Internet » PHP »

Funciones con cantidad de parámetros variable.

Estas en el tema de Funciones con cantidad de parámetros variable. en el foro de PHP en Foros del Web. Tengo un script que recibe por POST varios ids de mensajes de un chat que van a ser eliminados, la cantidad de ids a recibir ...
  #1 (permalink)  
Antiguo 26/10/2012, 09:16
 
Fecha de Ingreso: enero-2009
Mensajes: 56
Antigüedad: 15 años, 9 meses
Puntos: 1
Funciones con cantidad de parámetros variable.

Tengo un script que recibe por POST varios ids de mensajes de un chat que van a ser eliminados, la cantidad de ids a recibir es variable, depende de cuantos mensajes hayan sido seleccionados para elminar, por lo tanto el script va a recibir por POST:
Código:
$_POST[ 'id1' ], $_POST[ 'id2' ], ...... , $_POST[ 'idn' ]
La función que toma estos valores está definida para aceptar cualquier cantidad de parámetros.

Código:
removerMensajes( var1, var2, ......, varN )
La pregunta es: ya que no puedo saber cuantos ids van a enviarse por POST, existe alguna forma de pasar una cantidad de parámetros que no está definida a esta función??

Desde ya muchas gracias.
  #2 (permalink)  
Antiguo 26/10/2012, 09:35
 
Fecha de Ingreso: marzo-2010
Ubicación: Buenos Aires
Mensajes: 25
Antigüedad: 14 años, 8 meses
Puntos: 2
Respuesta: Funciones con cantidad de parámetros variable.

Hola, yo trabajo de esta forma

Código PHP:
<?php
$ids
=array(1,2,3,4,5,6);
function 
removerMensajes($ids){
    for(
$i=0;$i<sizeof($ids);$i++){
        
mysql_query("DELETE FROM table1 WHERE id=".$ids[$i]);
    }
}
?>
  #3 (permalink)  
Antiguo 26/10/2012, 10:28
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años, 6 meses
Puntos: 528
Respuesta: Funciones con cantidad de parámetros variable.

Si, es posible pasar una cantidad indefinida de parámetros y luego en la función que los recibe verificar cuántos le pasaron, aunque para lo que necesitas es mejor pasar los elementos en un arreglo. Incluso puedes usar el mismo arreglo $_POST, pasándolo como único parámetro a la función.
  #4 (permalink)  
Antiguo 26/10/2012, 12:13
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 17 años, 3 meses
Puntos: 194
Respuesta: Funciones con cantidad de parámetros variable.

Cita:
Iniciado por georgiy_84 Ver Mensaje
Hola, yo trabajo de esta forma

Código PHP:
<?php
$ids
=array(1,2,3,4,5,6);
function 
removerMensajes($ids){
    for(
$i=0;$i<sizeof($ids);$i++){
        
mysql_query("DELETE FROM table1 WHERE id=".$ids[$i]);
    }
}
?>
Yo lo haria con un in que es mas performante

Código PHP:
Ver original
  1. <?php
  2. $ids=array(1,2,3,4,5,6);
  3.  
  4. function removerMensajes($ids){
  5.  
  6.     $ids = implode(",", $ids)
  7.     mysql_query("DELETE FROM table1 WHERE id in ($ids)");
  8. }
  9. ?>
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #5 (permalink)  
Antiguo 28/10/2012, 18:19
 
Fecha de Ingreso: enero-2009
Mensajes: 56
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Funciones con cantidad de parámetros variable.

Muchas gracias por las respuestas, pero al parecer no explique correctamente mi duda. Yo ya tengo una función "removerMensajes" que está definida como expliqué( removerMensajes( var1, var2, ......, varN ) ) internamente esta función hace otras cosas además de eliminar el mensaje de la base de datos y su funcionamiento varía si recibe 1 parámetro, si recibe 2 o si recibe 10, por lo tanto no es lo mismo hacer:

Código:
removerMensaje( var1 );
removerMensaje( var2 );
que hacer:

Código:
removerMensaje( var1, var2 );
La función funciona correctamente.

Por otro lado recibo los datos de un formulario donde se definen los ids de las variables a eliminar, ej:

Código:
$_POST[ 'id1' ];
$_POST[ 'id2' ];
Yo quiero hacer un código que en forma automatizada me permita pasar a removerMensajes las variables descritas, esto sería:

Código:
removerMensajes( $_POST[ 'id1' ], $_POST[ 'id2' ] );
El problema es que la cantidad de variables a pasarle a esta función es variable, si se enviara:

Código:
$_POST[ 'id1' ];
$_POST[ 'id2' ];
$_POST[ 'id3' ];
$_POST[ 'id4' ]
Mi código debería ser capás de pasar como parámetro estas variables de forma que lo que se ejecute sea:

Código:
removerMensajes( $_POST[ 'id1' ], $_POST[ 'id2' ], $_POST[ 'id3' ], $_POST[ 'id4' ] );
La duda es: ¿¿Esto puede realizarse sin cambiar la función removerMensajes para que acepte un array de ids ??

Muchas gracias por las respuestas.
  #6 (permalink)  
Antiguo 28/10/2012, 18:56
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 10 meses
Puntos: 845
Respuesta: Funciones con cantidad de parámetros variable.

Podrías utilizar call_user_func_array.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #7 (permalink)  
Antiguo 28/10/2012, 18:58
 
Fecha de Ingreso: octubre-2012
Mensajes: 3
Antigüedad: 12 años
Puntos: 1
Respuesta: Funciones con cantidad de parámetros variable.

Sí que puedes, con call_user_func_array, (mírate la documentación en php.net).
De todas formas, yo que tu, en lugar de pasar id1, id2... etc por POST, pasaría un array de ids que es mucho más cómodo de usar...
  #8 (permalink)  
Antiguo 29/10/2012, 06:23
 
Fecha de Ingreso: enero-2009
Mensajes: 56
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Funciones con cantidad de parámetros variable.

Muchas gracias, algo como esa función era precisamente lo que buscaba. Acerca de lo que newfag comenta acerca de utilizar un array estoy de acuerdo, pero, está duda que tenía era más didáctica que práctica, nuevamente gracias. Saludos.

Etiquetas: cantidad, funciones, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:38.