saludos!. les comento:
tengo este arreglo formado a pie:
$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:
echo "<pre>";
print_r($array);
echo "</pre>";
y imprime:
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:
foreach($array as $arreglo)
{
echo '' .$arreglo['id']. ' ' .$arreglo['nombre']. ' ' .$arreglo['Hijos']['id']. '<br>';
}
pero no imprime bien, hace esto:
Alberto
02 Gerson
03 Zaida
y pues mi idea seria algo haci
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??
$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:
foreach($array as $arreglo)
{
echo '' .$arreglo['id']. ' ' .$arreglo['nombre']. '<br>';
if( isset( $arreglo['Hijos'] ) )
foreach($arreglo['Hijos'] as $hijo)
echo ' ' .$hijo['id']. ' ' .$hijo['nombre']. '<br>';
}
Saludos.
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:
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:
foreach($array as $arreglo)
{
echo '' .$arreglo['id']. ' ' .$arreglo['nombre']. '<br>';
if( is_array( $arreglo['Hijos'] ) )
foreach($arreglo['Hijos'] as $hijo)
echo str_repeat(' ',2).$hijo['id']. ' ' .$hijo['nombre']. '<br>';
if( is_array( $arreglo['Hijos']['Hijos'] ) )
foreach($arreglo['Hijos']['Hijos'] as $hijo)
echo str_repeat(' ',4).$hijo['id']. ' ' .$hijo['nombre']. '<br>';
}
pero no imprime la de adentro, los hjos del 3er nivel
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.
foreach($array as $arreglo)
{
echo '' .$arreglo['id']. ' ' .$arreglo['nombre']. '<br>';
if( is_array( $arreglo['Hijos'] ) )
foreach($arreglo['Hijos'] as $Hijo)
{
echo str_repeat(' ',2).$Hijo['id']. ' ' .$Hijo['nombre']. '<br>';
if( is_array( $Hijo['Hijos'] ) )
foreach($Hijo['Hijos'] as $hijo)
echo str_repeat(' ',4).$hijo['id']. ' ' .$hijo['nombre']. '<br>';
}
}
miren esta solucion:
imaginense este arreglo multidimencional.
$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..
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