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.=" ";
$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.=" ";
$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.=" ";
> > $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