Autor Tema: Recorrido de arrays multidimensionales php for o for each Ejercicio CU00826B  (Leído 3296 veces)

chontl02

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Disculpen pero tengo una pregunta, ya lo corregi pero me gustaria saber el por que.

Este es mi codigo:
Código: [Seleccionar]
<?php
$a=array
(
array(
array('portero'=>'Frank','Defensa'=>'Pepe','Medio'=>'Luis','Delantero'=>'Raul'),
array('portero'=>'Tiger','Defensa'=>'Mouryn','Medio'=>'Kats','Delantero'=>'Alberto'),
),
array
(
array('portero'=>'Higuita','Defensa'=>'Mel','Medio'=>'Rubens','Delantero'=>'Messi'),
array('portero'=>'Kostenmeiner','Defensa'=>'Lenkins','Medio'=>'Marash','Delantero'=>'Juanes'),
),
array
(
array('portero'=>'Suarez','Defensa'=>'Koltz','Medio'=>'Fernandez','Delantero'=>'Ramirez'),
),
);

for($i=0;$i<count($a);$i++)
{
for($j=0;$j<count($a[$i]);$j++)
{
for($k=0;$k<count($a[$i][$j]);$k++)
{
echo"$a[$i][$j][$k]";
}
echo"<br>";
}
echo"<br><br>";
}
?>



y me da como resultado esto:


Array[0][0]Array[0][1]Array[0][2]Array[0][3]
Array[1][0]Array[1][1]Array[1][2]Array[1][3]


Array[0][0]Array[0][1]Array[0][2]Array[0][3]
Array[1][0]Array[1][1]Array[1][2]Array[1][3]


Array[0][0]Array[0][1]Array[0][2]Array[0][3]


¿Me podrian explicar por que sucede esto?,  de ante mano gracias
« Última modificación: 19 de Junio 2015, 15:12 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola! Te comento las cosas que tienes que corregir

Código: [Seleccionar]
$a= array('portero'=>'Frank','Defensa'=>'Pepe','Medio'=>'Luis','Delantero'=>'Raul');
Significaría que tenemos un array con $a['portero'], $a['Defensa'], $a['Medio'] y $a['Delantero']

Código: [Seleccionar]
$a= array (array('portero'=>'Frank','Defensa'=>'Pepe','Medio'=>'Luis','Delantero'=>'Raul'));
Significaría que tenemos un array con

$a[0]['portero'], $a[0]['Defensa'], $a[0]['Medio'] y $a[0]['Delantero']


En este último caso el planteamiento es: tenemos un array y cada uno de sus elementos es otro array

Para definir los componentes de equipos solo nos hacen falta dos niveles de anidamiento, uno para saber el equipo y otro para saber el puesto. Entonces la declaración no necesita tantos arrays, es suficiente con:

Código: [Seleccionar]
$a= array(
array('portero'=>'Frank','Defensa'=>'Pepe','Medio'=>'Luis','Delantero'=>'Raul'),
array('portero'=>'Tiger','Defensa'=>'Mouryn','Medio'=>'Kats','Delantero'=>'Alberto'),
array('portero'=>'Higuita','Defensa'=>'Mel','Medio'=>'Rubens','Delantero'=>'Messi'),
array('portero'=>'Kostenmeiner','Defensa'=>'Lenkins','Medio'=>'Marash','Delantero'=>'Juanes'),
array('portero'=>'Suarez','Defensa'=>'Koltz','Medio'=>'Fernandez','Delantero'=>'Ramirez')
);

Para acceder al segundo índice del array tienes que utilizar el índice asociativo, por ejemplo 'portero'. El índice numérico se usa si no existe índice asociativo.

El código quedaría (pongo varios ejemplos de recorrido con bucle, con for normal o con con for each):

Código: [Seleccionar]
<?php
$a= array(
array('portero'=>'Frank','Defensa'=>'Pepe','Medio'=>'Luis','Delantero'=>'Raul'),
array('portero'=>'Tiger','Defensa'=>'Mouryn','Medio'=>'Kats','Delantero'=>'Alberto'),
array('portero'=>'Higuita','Defensa'=>'Mel','Medio'=>'Rubens','Delantero'=>'Messi'),
array('portero'=>'Kostenmeiner','Defensa'=>'Lenkins','Medio'=>'Marash','Delantero'=>'Juanes'),
array('portero'=>'Suarez','Defensa'=>'Koltz','Medio'=>'Fernandez','Delantero'=>'Ramirez')
);

echo 'Comprobacion 1: <br/>';

for($i=0;$i<count($a);$i++)
{

echo 'Portero: '.$a[$i]['portero'];
echo ' Defensa: '.$a[$i]['Defensa'];
echo ' Medio: '.$a[$i]['Medio'];
echo ' Delantero: '.$a[$i]['Delantero'];


echo"<br/><br/>";
}

echo 'Comprobacion 2: <br/>';
 foreach($a as $valor) {
echo 'Portero: ' $valor['portero'] . '<br />';
echo 'Defensa: ' $valor['Defensa'] . '<br />';
echo 'Medio: ' $valor['Defensa'] . '<br />';
echo 'Delantero: ' $valor['Defensa'] . '<br />';
echo '*********                               *******************<br/>';
}

echo 'Comprobacion 3: <br/>';
 foreach($a as $key1=>$key2) {
foreach ($key2 as $key3=>$value) {
echo $key3 .' :'$a[$key1][$key3] . ' o tambien podemos escribir '.$key3.':'.$value.'<br />';


}
echo '#######                       #############<br/>';


}

echo 'Probando '.$a//$a es un array cuyos índices son 0,1, 2, 3, 4...
echo 'Probando '.$a[0]; // $a[0] es otro array cuyos índices son 'portero', 'Defensa', etc.
echo 'Probando '.$a[0][0]; // No es válido
echo 'Probando '.$a[0]['portero']; //Acceso a un elemento concreto
?>

?>
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".