Fwd: Re: [PHP-ES] aayuda

From: Luis Martin-Santos ( luis .en. webalianza.com)
Date: Thu Mar 04 2004 - 10:25:14 CET


---------- Mensaje reenviado ----------

Subject: Re: [PHP-ES] aayuda
Date: Thursday 04 March 2004 10:23
From: Luis Martin-Santos < luis .en. webalianza.com>
To: irantzu .en. dosalcubo.net

El Thursday 04 March 2004 09:49, irantzu escribió:
Puedes hacer una tabla tal que así:

        CREATE TABLE capitulos (
        id int(10) unsigned NOT NULL auto_increment,
        idpadre int(10) unsigned not_null,
        idcapitulo int(4) unsigned not_null,
        titulo text,
        PRIMARY KEY(id));

        y luego para crear la estructura que te he comentado, pues otra función
recursiva :D

        function CogerCapitulos($idpadre=0)
        {

                $con = mysql_connect("blablaba");
                $res = mysql_query("SELECT * FROM capitulos WHERE idpadre=".$idpadre);
                if ($res)
                while ($row= mysql_fetch_assoc($res))
                {
                        $capcnt++;
                        $arr[capcnt]["titulo"] = $row["titulo"];
                        $arr[capcnt]["hijos"] = CogerCapitulos($row["id"]);
                }
                return $arr;
        }

> Luis Martin-Santos escribió:
> >Lo que necesitas es una función recursiva, aunque, de todas maneras creo
> > que tienes el array mal estructurado; Yo te propongo lo siguiente :
> >
> >ejemplo:
> >
> >para un array de este tipo:
> >
> >$arr[1]["titulo"] ="Introduccion";
> >$arr[1]["hijos"][1]["titulo"] = "Primero de Introduccion";
> >$arr[1]["hijos"][1]["hijos"][1]["titulo"] = "Hijo del de arriba";
> >$arr[1]["hijos"][2]["titulo"] = "Segundo de Introduccion";
> >$arr[1]["hijos"][2]["hijos"][1]["titulo"] = "Hijo de segundo de";
> >$arr[2]["titulo"] = "Segundo Parrafo";
> >$arr[2]["hijos"][1]["titulo"] = "Hijo de Segundo Parrafo";
> >
> >de manera que cada elemento del array pueda tener
> >a su vez hijos y titulo, manteniendo una estructura constante
> >en la que los índices del array mantengan su posición
> >jerárquica. Esta estructura puede parecer un poco confusa, pero verás
> > porqué la hacemos así:
> >
> >Una función recursiva es aquella que se llama a si misma hasta que
> > encuentra un punto muerto; Te muestro el ejemplo:
> >
> >
> ><?php
> >$arr[1]["titulo"] ="Introduccion";
> >$arr[1]["hijos"][1]["titulo"] = "Primero de Introduccion";
> >$arr[1]["hijos"][1]["hijos"][1]["titulo"] = "Hijo del de arriba";
> >$arr[1]["hijos"][2]["titulo"] = "Segundo de Introduccion";
> >$arr[1]["hijos"][2]["hijos"][1]["titulo"] = "Hijo de segundo de";
> >$arr[2]["titulo"] = "Segundo Parrafo";
> >$arr[2]["hijos"][1]["titulo"] = "Hijo de Segundo Parrafo";
> >
> >
> >function VerCapitulos($array,$is_root=1,$treshold=0, $base="")
> > {
> > for ($i=0;$i<$treshold;$i++)
> > $c.="&nbsp;&nbsp;";
> > $treshold++;
> >
> > for ($i=1;$i<count($array)+1; $i++)
> > {
> >
> > $c .= ($base ? $base ."." : "").$i." ".$array[$i]["titulo"]."<br />";
> > if (is_array($array[$i]["hijos"]))
> > $c .= VerCapitulos ($array[$i]["hijos"] ,0, $treshold , ($base ?
> >$base .".".$i : $i)) ;
> >
> > }
> >
> > return $c;
> > }
> >
> > echo VerCapitulos($arr);
> >
> >
> >Si miras la función , cicla por cada elemento del array que le pasas por
> > la variable $array y muestra su titulo, a continuación comprueba si
> >$array["hijos"] es a su vez un array (lo cual significa que hay más hijos)
> > y si lo hay, se llama a si misma indicando como array en el que trabajar
> > el trozo del array que contiene a los hijos (OJO no el array completo)
> >
> >Un saludo.
> >
> >El Wednesday 03 March 2004 19:00, irantzu escribió:
> >>Hola a tod .en. s!!!!
> >>
> >>Mi problema es el siguiente, tengo una tabla con n columnas,
> >>estructurada de la siguiente manera.
> >>
> >>*num* *c1* *c2* *c3*
> >>1 1 1.1 1.1.2
> >>2 2 2.1
> >>3 1 1.2
> >>4 4 4.1
> >>5 3 3.1
> >>6 1 1.1 1.1.1
> >>7 1 1.1 1.1.3
> >>8 2 2.2
> >>9 3 3.2 3.2.1
> >>10 4 4.2
> >>11 3 3.2 3.2.2
> >>
> >>
> >>
> >>y los resultados deben aparecer de la siguiente manera
> >>
> >>
> >>
> >> 1
> >> 1.1
> >> 1.1.1
> >> 1.1.2
> >> 1.1.3
> >> 2
> >> 2.1
> >> 2.2
> >> 3
> >> 3.1
> >> 3.2
> >> 3.2.1
> >> 3.2.2
> >> 4
> >> 4.1
> >> 4.2
> >>
> >>
> >>como no se exactamente cuantos campos tengo, no logro que me muestre lo
> >>que necesito.
> >>
> >>Si alguien ha hecho algo parecido o puede darme alguna pista se lo
> >>agradeceré muchísimo.
> >>
> >>Muchas gracias
> >>
> >>Irantzu
>
> Muchas gracias por tu ayuda, el caso es que veo muy claro cuando lo
> tienes en un arreglo, pero no lo tengo tan claro como hago para sacar
> esos datos de una base de datos. De todas maneras le sigo dando vueltas
> al asunto.
> Muchos saludos
> Irantzu

-------------------------------------------------------

-- 
PHP Spanish Localization Talk Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


This archive was generated by hypermail 2.1.7 : Fri May 14 2004 - 16:04:34 CEST