Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Funcion recursiva con Objetos

Estas en el tema de Funcion recursiva con Objetos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola a todos Tengo una clase con una función recursiva, pero cuando llamo a la función se me cuelga... Alguna idea?? Código PHP: function  SumChildren ...
  #1 (permalink)  
Antiguo 03/10/2008, 05:18
 
Fecha de Ingreso: septiembre-2008
Mensajes: 16
Antigüedad: 15 años, 7 meses
Puntos: 0
Busqueda Funcion recursiva con Objetos

Hola a todos

Tengo una clase con una función recursiva, pero cuando llamo a la función se me cuelga... Alguna idea??

Código PHP:
function SumChildren($parent$rows) {    
        foreach (
$rows as $row){
            
$first 0;
            if (
$row->parent == $parent->id$first 1;
            if (
$first 0) return;
        }
        foreach (
$rows as $row){        
            foreach (
$rows as $children){
                if (
$children->parent == $row->id){
                    
$row->numlinks += $children->numlinks;
                }
            }
            
Miclase::SumChildren($row$rows);
        }
        return 
$rows;
    } 
Muchas gracias de antemano
  #2 (permalink)  
Antiguo 03/10/2008, 05:29
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Funcion recursiva con Objetos

¿Qué se supone que hace esa función?
  #3 (permalink)  
Antiguo 03/10/2008, 05:33
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Funcion recursiva con Objetos

Si se "te cuelga" el problema es que entras en loop... cual es la condición de corte?
__________________
Blog phpsenior.com Cursos a Distancia surforce.com

Última edición por enriqueplace; 03/10/2008 a las 06:25
  #4 (permalink)  
Antiguo 03/10/2008, 05:40
 
Fecha de Ingreso: septiembre-2008
Mensajes: 16
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Funcion recursiva con Objetos

Estoy trabajando en un portal de enlaces que imita dmoz

Esta función recibe una consulta y suma el numero de links de las categorías hijos a las categorías padre.

El problema es que no me da ningún error y no sé detectar el problema
  #5 (permalink)  
Antiguo 03/10/2008, 05:47
 
Fecha de Ingreso: septiembre-2008
Mensajes: 16
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Funcion recursiva con Objetos

acabo de ver un error en el primer bucle if first = 1, debería ser ==, voy a probar
  #6 (permalink)  
Antiguo 03/10/2008, 05:55
 
Fecha de Ingreso: septiembre-2008
Mensajes: 16
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Funcion recursiva con Objetos

nada, en realidad el primer loop es bastante inutil, no os parece?
  #7 (permalink)  
Antiguo 03/10/2008, 06:03
venkman
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Funcion recursiva con Objetos

El asunto es que no acabo de entender qué es $rows o qué crees que es $rows.

El primer bucle, que no sé para qué sirve, podría resumirse en:
Código php:
Ver original
  1. foreach ($rows as $row){
  2.     if ($row->parent != $parent->id) return;
  3. }
Pero como digo no sé qué significado tiene... Recorres las filas y si hay alguna cuyo padre no es parent, entonces se termina la función.

Luego, el segundo bucle, como dice enriqueplace, no parece tener forma de terminar. Por cada fila de $rows, vuelves a llamar a SumChildren pasándole todo $rows entero otra vez. Así es fácil que no termine nunca. Terminaría si ocurre lo del primer bucle, pero si no ocurre, no termina nunca.

Pero tampoco entiendo por qué para cada fila de $rows, recorres todo $rows otra vez (llamándolo children??). ¿Estás tratando de implementar algún tipo de estructura en árbol o similar?
  #8 (permalink)  
Antiguo 03/10/2008, 06:10
 
Fecha de Ingreso: septiembre-2008
Mensajes: 16
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Funcion recursiva con Objetos

gracias venkman por tu ayuda.

Si eso es lo que estoy intentando hacer.

Tengo una estructura de categorias en arbol, y cada una de estas categorias tiene una serie de links.
En la consulta de categorias saco estos campos: id, padre, nombre, numlinks

lo que estoy intentando es sumar el numero de links de las categorías hijo a los padres...

tal que

Categoria 1 (5)
- Categoria 1.1 (3)
- Categoria 1.2 (1)
- - Categoria 1.2.1 (1)

Como lo ves?
  #9 (permalink)  
Antiguo 03/10/2008, 06:13
 
Fecha de Ingreso: septiembre-2008
Mensajes: 16
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Funcion recursiva con Objetos

tal vez sería mejor usar arrays en vez de objetos?
  #10 (permalink)  
Antiguo 03/10/2008, 06:31
 
Fecha de Ingreso: septiembre-2008
Mensajes: 16
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Funcion recursiva con Objetos

ya lo he resuelto!!

Aunque no me habéis dado la respuesta 'digerida' me han ido muy bien vuestras opiniones,

aquí os dejo la función

Muchas gracias

Código PHP:
    function SumChildren($parent, &$rows) {
    
        foreach (
$rows as $row){        
            if (
$row->parent == $parent->id ){
                
MiCalse::SumChildren($row$rows);
                
$parent->numlinks += $row->numlinks;
            }            
        }
        return 
$rows;
    } 
  #11 (permalink)  
Antiguo 03/10/2008, 07:39
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Funcion recursiva con Objetos

Cita:
Iniciado por xavip Ver Mensaje
tal vez sería mejor usar arrays en vez de objetos?
Yo casi siempre diría lo opuesto
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
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 03:37.