Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: chontl02 en 17 de Junio 2015, 00:40

Título: Recorrido de arrays multidimensionales php for o for each Ejercicio CU00826B
Publicado por: chontl02 en 17 de Junio 2015, 00:40
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
Título: Re:Recorrido de arrays multidimensionales php for o for each Ejercicio CU00826B
Publicado por: César Krall en 19 de Junio 2015, 15:14
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
?>

?>