Foros del Web » Programando para Internet » PHP »

Problema con funcion recursiva

Estas en el tema de Problema con funcion recursiva en el foro de PHP en Foros del Web. Esta función es para ordenar de forma jerárquica las páginas de un sitio web: Código PHP: private function  ordenarPaginasJerarquicamente ( $padre , $paginas , $prefijo ){ ...
  #1 (permalink)  
Antiguo 08/08/2011, 10:07
 
Fecha de Ingreso: septiembre-2006
Ubicación: La Plata
Mensajes: 52
Antigüedad: 17 años, 7 meses
Puntos: 4
Pregunta Problema con funcion recursiva

Esta función es para ordenar de forma jerárquica las páginas de un sitio web:

Código PHP:
private function ordenarPaginasJerarquicamente($padre,$paginas,$prefijo){
        
$resultado=array();
        foreach(
$paginas as $pagina){
            if(
$pagina->id_padre==$padre){
                
$pagina->titulo=$prefijo.$pagina->titulo;
                
array_push($resultado,$pagina);
                
$hijos=$this->ordenarPaginasJerarquicamente($pagina->id,$paginas,$prefijo.$prefijo);
                if(
count($hijos))
                    
array_push($resultado,$hijos);
            }
        }
        return 
$resultado;    
    } 
El problema es que al llegar al segundo escalón en la jerarquía, me tira error al tratar de acceder a la propiedad titulo de la página..

A la función la llamo así:

Código PHP:
$this->ordenarPaginasJerarquicamente(0,$this->sistema->getPaginas(),'-'
Cualquier cosa que necesiten para ayudarme a resolver esto me dicen.

Muchas gracias!
  #2 (permalink)  
Antiguo 08/08/2011, 10:23
Avatar de Karmac  
Fecha de Ingreso: agosto-2011
Ubicación: Bilbao
Mensajes: 196
Antigüedad: 12 años, 8 meses
Puntos: 34
Respuesta: Problema con funcion recursiva

¿Estás hablando de la siguiente línea verdad?
Código:
$pagina->titulo=$prefijo.$pagina->titulo;
¿Que tipo de error te tira? ¿La variable es pública o privada? Saludos.
  #3 (permalink)  
Antiguo 08/08/2011, 11:47
 
Fecha de Ingreso: septiembre-2006
Ubicación: La Plata
Mensajes: 52
Antigüedad: 17 años, 7 meses
Puntos: 4
Respuesta: Problema con funcion recursiva

Me tira:

Trying to get property of non-object in line... que es la línea donde imprimo el resultado del array devuelto por la función con un foreach. El error salta al pasar por la página hija e intentar imprimir el título.

La variable es pública ya que es resultado de un mysql_fetch_object de la tabla "pagina".
  #4 (permalink)  
Antiguo 08/08/2011, 11:52
 
Fecha de Ingreso: septiembre-2006
Ubicación: La Plata
Mensajes: 52
Antigüedad: 17 años, 7 meses
Puntos: 4
Respuesta: Problema con funcion recursiva

hice un print_r sobre el arreglo que me devuelve y sale bien la subpagina... no se por que en el foreach se produce el inconveniente...

Array ( [0] => stdClass Object ( [id] => 1 [id_padre] => 0 [titulo] => -Servicios [icono] => b9dd9711d06d9beda552351ccce9c8ab.png [extracto] => probando 123... [cuerpo] => probando 123... [url_amistosa] => servicios [destacada] => 1 ) [1] => Array ( [0] => stdClass Object ( [id] => 8 [id_padre] => 1 [titulo] => --saasdasd [icono] => d41d8cd98f00b204e9800998ecf8427e.png [extracto] => [cuerpo] => [url_amistosa] => saasdasd [destacada] => 0 ) ) [2] => stdClass Object ( [id] => 2 [id_padre] => 0 [titulo] => -Tecnologías [icono] => de6022f89c3dbf65a6c709d3b931a29c.png [extracto] => probando 123... [cuerpo] => probando 123... [url_amistosa] => tecnologias [destacada] => 2 ) [3] => stdClass Object ( [id] => 5 [id_padre] => 0 [titulo] => -Casos de Éxito [icono] => 640c145431f0ca7ab3e78144aab57150.png [extracto] => Descripción... [cuerpo] => Descripción... [url_amistosa] => casos-de-exito [destacada] => 3 ))
  #5 (permalink)  
Antiguo 08/08/2011, 12:00
 
Fecha de Ingreso: septiembre-2006
Ubicación: La Plata
Mensajes: 52
Antigüedad: 17 años, 7 meses
Puntos: 4
Respuesta: Problema con funcion recursiva

Ya lo solucioné, el problema estaba en que agregaba al array de hijos completo, y debia hacerlo agregando uno a uno sus hijos jaja xD

dejo la solución por si a alguien le sirve la función:

Código PHP:
private function ordenarPaginasJerarquicamente($padre,$paginas,$prefijo){
        
$resultado=array();
        foreach(
$paginas as $pagina){
            if(
$pagina->id_padre==$padre){
                
$pagina->titulo=$prefijo.$pagina->titulo;
                
array_push($resultado,$pagina);
                
$hijos=$this->ordenarPaginasJerarquicamente($pagina->id,$paginas,$prefijo.$prefijo);
                if(
count($hijos)){
                    foreach (
$hijos as $hijoarray_push($resultado,$hijo);
                }
            }
        }
        return 
$resultado;    
    } 

Etiquetas: funcion, recursiva
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 20:45.