imprimir arreglos multidimencionales...!!

Iniciado por 01munrra, 29 Abril 2012, 06:07 AM

0 Miembros y 1 Visitante están viendo este tema.

01munrra

saludos!. les comento:

tengo este arreglo formado a pie:

Código (php) [Seleccionar]

$array = array(
   1 => array(
               "id1" => "01",
               "nombre" => "Alberto",
   "Hijos" => array(
    1 => array(
   "id" => "04",
   "nombre" => "jeferson",
   ),
2 => array(
   "id" => "05",
   "nombre" => "Zaida",
   ),    
    ),
      ),
   2 => array(
      "id" => "02",
  "nombre" => "Gerson",
              ),
   3 => array(
      "id" => "03",
  "nombre" => "Zaida",
              )    
  );


y lo mando a mostrar coni:

Código (php) [Seleccionar]


echo "<pre>";
print_r($array);
echo "</pre>";


y imprime:

Código (php) [Seleccionar]

Array
(
    [1] => Array
        (
            [id1] => 01
            [nombre] => Alberto
            [Hijos] => Array
                (
                    [1] => Array
                        (
                            [id] => 04
                            [nombre] => jeferson
                        )

                    [2] => Array
                        (
                            [id] => 05
                            [nombre] => Zaida
                        )

                )

        )

    [2] => Array
        (
            [id] => 02
            [nombre] => Gerson
        )

    [3] => Array
        (
            [id] => 03
            [nombre] => Zaida
        )

)


pero ahora quisiera imprimirlo de manera normal, como lo hacia?

hice esto:

Código (php) [Seleccionar]

foreach($array as $arreglo)
{
echo '' .$arreglo['id']. '&nbsp;&nbsp;' .$arreglo['nombre']. '&nbsp;&nbsp;' .$arreglo['Hijos']['id']. '<br>';
}


pero no imprime bien, hace esto:

Código (php) [Seleccionar]

  Alberto 
02  Gerson 
03  Zaida 


y pues mi idea seria  algo haci

Código (php) [Seleccionar]

01
   01 alberto
                04 jeferson
                05  zaida
   02 Gerson
   03 zaida

esto lo hice a pie...
si notan es como armar un arbol, donde cada persona tiene un hijo...

mi pregunta como podria hacer para que me imprima haci, o que estoy haciendo mal??

_teiki

Código (php) [Seleccionar]

$array = array(
                   1 => array(
                        "id1" => "01",
                                "nombre" => "Alberto",


En primer lugar tienes id1 por eso no te imprime la id.

Para imprimirlos como tu quieres deberías de utilizar 2 foreach de la siguiente forma:

Código (php) [Seleccionar]

foreach($array as $arreglo)
{
echo '' .$arreglo['id']. '&nbsp;&nbsp;' .$arreglo['nombre']. '<br>';

if( isset( $arreglo['Hijos'] ) )
foreach($arreglo['Hijos'] as $hijo)
echo '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' .$hijo['id']. '&nbsp;&nbsp;' .$hijo['nombre']. '<br>';
}


Saludos.

01munrra

si funciona gracias!!!....

ahora tengo que tratarlo de hacer de la siguiente forma,,, que pasaria si tengo 3 hijos principales, estos tienen cada uno 2 hijos y estos hijos tienen un hijo cada uno...

algo haci:

Código (php) [Seleccionar]

Array
(
    [0] => Array
        (
            [id] => 01
            [nombre] => Alberto
            [Hijos] => Array
                (
                    [1] => Array
                        (
                            [id] => 04
                            [nombre] => jeferson
                            [Hijos] => Array
                                (
                                    [id] => 03
                                    [nombre] => Jossue
                                )

                        )

                    [2] => Array
                        (
                            [id] => 05
                            [nombre] => Zaida
                            [Hijos] => Array
                                (
                                    [id] => 02
                                    [nombre] => andreina
                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 02
            [nombre] => Gerson
            [Hijos] => Array
                (
                    [1] => Array
                        (
                            [id] => 05
                            [nombre] => cacilia
                            [Hijos] => Array
                                (
                                    [id] => 02
                                    [nombre] => oscar
                                )

                        )

                    [2] => Array
                        (
                            [id] => 09
                            [nombre] => fulgencio
                            [Hijos] => Array
                                (
                                    [id] => 07
                                    [nombre] => andrea
                                )

                        )

                )

        )

    [2] => Array
        (
            [id] => 03
            [nombre] => Zaida
            [Hijos] => Array
                (
                    [1] => Array
                        (
                            [id] => 01
                            [nombre] => antony
                            [Hijos] => Array
                                (
                                    [id] => 04
                                    [nombre] => albert
                                )

                        )

                    [2] => Array
                        (
                            [id] => 08
                            [nombre] => andres
                            [Hijos] => Array
                                (
                                    [id] => 10
                                    [nombre] => gregori
                                )

                        )

                )

        )

)


hice esto:

Código (php) [Seleccionar]

foreach($array as $arreglo)
{
echo '' .$arreglo['id']. '&nbsp;&nbsp;' .$arreglo['nombre']. '<br>';

if( is_array( $arreglo['Hijos'] ) )
foreach($arreglo['Hijos'] as $hijo)
echo str_repeat('&nbsp;&nbsp;&nbsp;',2).$hijo['id']. '&nbsp;&nbsp;' .$hijo['nombre']. '<br>';

if( is_array( $arreglo['Hijos']['Hijos'] ) )
foreach($arreglo['Hijos']['Hijos'] as $hijo)
echo str_repeat('&nbsp;&nbsp;&nbsp;',4).$hijo['id']. '&nbsp;&nbsp;' .$hijo['nombre']. '<br>';

}


pero no imprime la de adentro, los hjos del 3er nivel

s00rk

Como son Hijos de 3 nivel, deben estar dentro del segundo nivel, lo cual tu lo pides desde el 1 porque no utilizas llaves

Bueno podria ser asi supongo aunque no lo he provado, ahi te puedes dar cuenta que a los hijos del 2 nivel les puse Hijo y a los del 3 nivel hijo, por lo que asi podria ser posible hacerlo.

Código (php) [Seleccionar]

foreach($array as $arreglo)
{
echo '' .$arreglo['id']. '&nbsp;&nbsp;' .$arreglo['nombre']. '<br>';

if( is_array( $arreglo['Hijos'] ) )
foreach($arreglo['Hijos'] as $Hijo)
                {
echo str_repeat('&nbsp;&nbsp;&nbsp;',2).$Hijo['id']. '&nbsp;&nbsp;' .$Hijo['nombre']. '<br>';

if( is_array( $Hijo['Hijos'] ) )
foreach($Hijo['Hijos'] as $hijo)
echo str_repeat('&nbsp;&nbsp;&nbsp;',4).$hijo['id']. '&nbsp;&nbsp;' .$hijo['nombre']. '<br>';
                }
}

01munrra

miren esta solucion:

imaginense este arreglo multidimencional.

Código (php) [Seleccionar]

$array = array(
array(
  "H0",
  array(
    "H1",
array(
  "H2"
  )
    )
),
array(
  "Q0",
  array(
"Q1"
)
  ),
array(
  "E0",
  array(
"E0.1"
),
  "E1"
),
array(
  "R0",
  "R1",
  array(
"R1.0",
"R1.1",
array(
  "R1.1.0",
  "R1.1.1"
  ),
"R1.2"  
),
  )
   );



y  con esta funcion recursiva te permite mostrar todo el contenido del arreglo sin importar su longitud de profundidad..

Código (php) [Seleccionar]


function mostrar($arreglo,$nivel)
{
    for($i = 0; $i <count($arreglo); $i++)
{
        $parte = $arreglo[$i];

        if(gettype($parte) == "array")
{
            mostrar($parte,$nivel+4);
        }
        else
{
            echo str_repeat('_',$nivel).$parte."<BR>";
        }

    }
}


y es mejor puesto que sirve para cualquier algoritmo,,,,,

gracias!,, por prestar atencion a mi duda y pues esta es una buena solucion....

;D