Re: [PHP-ES] aayuda

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


Lo mismo de ayer :D

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

Subject: Re: [PHP-ES] aayuda
Date: Wednesday 03 March 2004 20:18
From: Luis Martin-Santos <luis .en. webalianza.com>
To: irantzu .en. dosalcubo.net

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

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

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

Subject: Fwd: Re: [PHP-ES] aayuda
Date: Wednesday 03 March 2004 20:20
From: Luis Martin-Santos <luis .en. webalianza.com>
To: php-es .en. lists.php.net

Me equivoqué al realizar el envio y además creo que puede ser util para el
resto, asi k lo reenvio

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

Subject: Re: [PHP-ES] aayuda
Date: Wednesday 03 March 2004 20:18
From: Luis Martin-Santos <luis .en. webalianza.com>
To: irantzu .en. dosalcubo.net

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

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

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

---------- 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