Foros del Web » Programando para Internet » PHP »

Función recursiva estructura de árbol

Estas en el tema de Función recursiva estructura de árbol en el foro de PHP en Foros del Web. Buenas! Estoy 'intentando' montar una estructura de árbol , y estoy peleandome con las funciones recursivas jeje. Tengo esto : Código PHP: function  espace ( ...
  #1 (permalink)  
Antiguo 30/09/2011, 05:16
 
Fecha de Ingreso: octubre-2007
Mensajes: 118
Antigüedad: 17 años
Puntos: 11
Función recursiva estructura de árbol

Buenas!

Estoy 'intentando' montar una estructura de árbol , y estoy peleandome con las funciones recursivas jeje.
Tengo esto :
Código PHP:
function espace($rango) {
  
$ch="";
  for (
$x=0;$x<$rango;$x++) {
      
$ch=$ch."&nbsp;&nbsp;&nbsp;&nbsp;";
  }
return 
$ch;
}
function 
recur($dir,$id,$rango) {
    for (
$x=0;$x<count($dir);$x++) {
     echo 
$dir[$x][0];
        if (
$dir[$x][1]==$id) {
            echo 
espace($rango).$dir[$x][2]."<BR>";
            
recur($dir,$dir[$x][0],$rango+1);
        }
    }
}
$data[] = array(1,0'home');
$data[] = array(2,1'usuario1');
$data[] = array(3,1'usuario2');
$data[] = array(4,1'usuario3');
$data[] = array(5,2'download');
$data[] = array(6,5'videos');
$data[] = array(7,3'mp3'); 
Y de resultado me muestra esto :
1home
12 usuario1
12345 download
123456 videos
12345677673 usuario2
1234567 mp3
12345674 usuario3
1234567567234567

Hace lo que quiero, pero no entiendo bien el porqué, me explico:
Entiendo como llega hasta 'videos' , pero luego en usuario 2, no entiendo
el paso de la variable $id que hace 7, 7 ,6,7 y llega al 3.

Lo he estado mirando paso a paso , pero es que cuando tengo como id = 6, lo que veo es que pararía (y solo me sacaría usuario1/download/videos) , no entiendo como hace para seguir, porque si no encuentra una coincidencia, para, y no tengo ningun valor en el array que tenga (x,6,'nombre')

Espero se me haya entendido y me puedan ayudar, llevo toda la mañana dandole vueltas y no se que se me escapa en serio :(.

Un saludo.
  #2 (permalink)  
Antiguo 01/10/2011, 11:29
 
Fecha de Ingreso: octubre-2007
Mensajes: 118
Antigüedad: 17 años
Puntos: 11
Respuesta: Función recursiva estructura de árbol

Lo subo al menos una vez para ver si puede alguien echarme una mano :(.

He simplificado un poco la función, quitando la función que hace los espacios.
Para ver si no me he explicado bien en la duda y por ello no me la podeis resolver:

Código PHP:

function recur($dir,$id) {
    
    for (
$x=0;$x<count($dir);$x++) {
        if (
$dir[$x][1] == $id) {
            echo 
$dir[$x][2]."<BR>";
            
recur($dir,$dir[$x][0]);
        }
    }
    echo 
'hola';
}
$data[] = array(1,0'home');
$data[] = array(2,1'usuario1');
$data[] = array(3,1'usuario2');
$data[] = array(4,1'usuario3');
$data[] = array(5,2'download');
$data[] = array(6,5'videos');
$data[] = array(7,3'mp3');

recur($data,0); 
La salida es :
home
usuario1
download
videos
holaholaholausuario2
mp3
holaholausuario3
holaholahola

Lo que no entiendo es porque se imprimen los 'hola' , si despues del echo no hay nada, y no se vuelve a llamar a la función.
Porque segun esto si la llama y me modifica la variable $id que muy bien porque hace lo que quiero, pero no lo entiendo :(

Última edición por shilen79; 01/10/2011 a las 12:12
  #3 (permalink)  
Antiguo 01/10/2011, 22:20
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Función recursiva estructura de árbol

Porque una funcion recursiva lo que hace es llamarse a si misma cuantas veces sea necesario; ya viste que dentro de tu for() { ... } hay un recur( ... ); ?

Y cada que se ejecuta la funcion se imprime un hola al final, independientemente de que se haya mostrado algo mas.
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 02/10/2011, 02:50
 
Fecha de Ingreso: octubre-2007
Mensajes: 118
Antigüedad: 17 años
Puntos: 11
Respuesta: Función recursiva estructura de árbol

Gracias por contestar!
Al final anoche ya lo saqué jeje. No recordaba que en las funciones recursivas, en este caso cuando no se cumple la condición se vuelve a llamar a la función cogiendo el anterior valor de la pila (al menos asi era en C).

Etiquetas: estructura, recursiva, variables, usuarios
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 11:51.