Foros del Web » Programando para Internet » PHP »

¿Cómo paso una función como parámetro?

Estas en el tema de ¿Cómo paso una función como parámetro? en el foro de PHP en Foros del Web. Tengo un array en forma de árbol con las categorías de un foro y lo que quiero hacer es un función recorrerArbol( arbol , funcion ...
  #1 (permalink)  
Antiguo 18/09/2009, 13:53
 
Fecha de Ingreso: enero-2009
Mensajes: 56
Antigüedad: 15 años, 2 meses
Puntos: 1
Pregunta ¿Cómo paso una función como parámetro?

Tengo un array en forma de árbol con las categorías de un foro y lo que quiero hacer es un función recorrerArbol( arbol , funcion ) que a cada elemento del árbol lo pasa por la función "funcion".
¿Hay alguna forma de hacer esto en PHP?
  #2 (permalink)  
Antiguo 18/09/2009, 13:55
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: ¿Cómo paso una función como parámetro?

Bueno puedes usar foreach para recorrer ese array.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 18/09/2009, 13:55
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿Cómo paso una función como parámetro?

http://www.php.net/array_map
  #4 (permalink)  
Antiguo 18/09/2009, 14:16
 
Fecha de Ingreso: enero-2009
Mensajes: 56
Antigüedad: 15 años, 2 meses
Puntos: 1
Respuesta: ¿Cómo paso una función como parámetro?

El problema es que la matriz tiene forma de árbol y la cantidad de nodos que tiene es arbitraria, entonces precisaría una función recursiva para recorrerla por completo, con el foreach y el array_map puedo aplicarle una función a los arrays del "array base", pero lo que quiero no es sólo eso, por lo menos me parece que es así, si alguien tiene alguna idea la agradeceré.

PD: además sería útil saber si se pueden pasar funciones parámetro.
  #5 (permalink)  
Antiguo 18/09/2009, 14:25
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: ¿Cómo paso una función como parámetro?

Bueno en el caso tuyo lo que puedes hacer es si recorriste el array con un foreach, verificar si el valor que tiene es un array, usando is_array(), si es así entonces recorres de nuevo la funcion con el valor corrrespondiente.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 18/09/2009, 14:28
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿Cómo paso una función como parámetro?

Pues debo admitir que no lo sabía, pero según el manual de array_map, en PHP > 5.3.0 lo siguiente es válido:


$funcion = function($parametros...) {
...
}

array_map($funcion, $vector)


Fíjate también por aquí: http://www.php.net/manual/en/languag...types.callback


Saludos.
  #7 (permalink)  
Antiguo 18/09/2009, 14:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: ¿Cómo paso una función como parámetro?

Puedes también ocupar una función recursiva para irlos aplicando:
Código PHP:
Ver original
  1. function workArray($array) {
  2.      foreach ($array as $value) {
  3.             if (is_array($value)) {
  4.                     workArray($value);
  5.             } else {
  6.                     // lo que vayas a hacer con el valor
  7.             }
  8.      }
  9. }

Saludos.
  #8 (permalink)  
Antiguo 18/09/2009, 14:34
 
Fecha de Ingreso: enero-2009
Mensajes: 56
Antigüedad: 15 años, 2 meses
Puntos: 1
Pregunta Respuesta: ¿Cómo paso una función como parámetro?

Lo que quiero hacer sería:
Código:
recorrerArray( arbol , funcion ){
   si( is_array( elemento ) ){
      funcion( elemento );
      foreach( elemento as $valor ){
         recorrerArray( $valor );
      }
   }else{
      funcion( elemento );
   }
Exácto, pero mi duda es simplemente si hay alguna forma de pasar funciones por parámetro.
  #9 (permalink)  
Antiguo 18/09/2009, 14:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: ¿Cómo paso una función como parámetro?

Claro, ya te dejo el link AlvaroG es el tipo callback.

Saludos.
  #10 (permalink)  
Antiguo 18/09/2009, 15:02
 
Fecha de Ingreso: enero-2009
Mensajes: 56
Antigüedad: 15 años, 2 meses
Puntos: 1
De acuerdo Respuesta: ¿Cómo paso una función como parámetro?

Si, perdón, no lo había visto, eso era exáctamente lo que buscaba, gracias a todos por la ayuda, saludos.
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 15:15.