Fwd: Re: [PHP-ES] aayuda

From: Luis Martin-Santos ( luis .en. webalianza.com)
Date: Wed Mar 03 2004 - 20:20:24 CET


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

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

-- 
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:33 CEST