1

Tengo este código:

for($i = 1 ; $i<=$jornadas;$i++){
    $local = $equipos[rand(1,($jornadas-1))];
    $partido = array ("local"=>$local);
    $ronda[$i][] = $partido;
}

foreach($ronda as $a){
    echo "<p>Equipo Local ".$a['local'];
}

Pero al ejecutar el código me pone:

"Undefined index: local"

¿Sabríais cuál es el motivo?

lois6b
  • 7,419
  • 5
  • 29
  • 50
Borja Sanchez
  • 387
  • 6
  • 12
  • 1
    No se puede adivinar lo que hay en `$ronda`. Si compartieras lo que aparece al hacer `print_r ($ronda);` podrías tener una respuesta más eficaz. O bien: `foreach($ronda as $k => $v){ echo $k." : ".$v."
    ";}` te mostraría las claves y al lado sus valores dentro del array. Quizá `local` es una clave dentro del array y no un valor y por eso no lo encuentra. Pero repito, depende de **lo que haya dentro de tu array**. Para más detalles: [ver esta respuesta](https://es.stackoverflow.com/a/79177/29967)
    – A. Cedano Jun 17 '17 at 15:55

2 Answers2

2

Voy a responder a esta cuestión aunque caiga en saco roto.

El problema es que se está creando un nivel extra en el array de resultados

 $jornadas=5;
    $equipos=["equipo1","equipo2","equipo3","equipo4","equipo5","equipo6","equipo7","equipo8"];
    for($i = 1 ; $i<=$jornadas;$i++){
        $local = $equipos[rand(1,($jornadas-1))];
        $partido = array ("local"=>$local);
        $ronda[$i][] = $partido;
               /*  ^
               /*  |------------------Aquí está el problema */
    }


    foreach($ronda as $a){
        echo "

    Equipo Local ".$a['local'];


    }

Al hacer esto, la variable $ronda tiene esta estructura:

Array
(
    [1] => Array
        (
            [0] => Array
                (
                    [local] => equipo5
                )
        )

    [2] => Array
        (
            [0] => Array
                (
                    [local] => equipo4
                )
        )

    [3] => Array
        (
            [0] => Array
                (
                    [local] => equipo4
                )
        )

    [4] => Array
        (
            [0] => Array
                (
                    [local] => equipo3
                )
        )

    [5] => Array
        (
            [0] => Array
                (
                    [local] => equipo5
                )
        )
)

Al iterar de este modo en esta esructura de datos:

foreach($ronda as $a){
        echo "

    Equipo Local ".$a['local'];


    }

La variable $a contiene estos datos:

Array
(
    [0] => Array
        (
            [local] => equipo4
        )

)

Y al intentar acceder al índice $a['local']nos provoca un error puesto que dicho índice se encuentra en un nivel má abajo.

Con este código funciona correctamente:

$jornadas=5;
$equipos=["equipo1","equipo2","equipo3","equipo4","equipo5","equipo6","equipo7","equipo8"];
    for($i = 1 ; $i<=$jornadas;$i++){
        $local = $equipos[rand(1,($jornadas-1))];
        $partido = array ("local"=>$local);
        $ronda[$i] = $partido; //Línea que producía el error corregida

    }

    foreach($ronda as $a){

        echo "

Equipo Local ".$a['local'];


    }

Cuyo resultoado es el esperado:

Equipo Local equipo3

Equipo Local equipo2

Equipo Local equipo2

Equipo Local equipo5

Equipo Local equipo3

ErnestoRM
  • 1,749
  • 1
  • 8
  • 20
1
foreach ($ronda as $key => $a)
    echo $a;

En un foreach, un array asociativo indica cada uno de los valores en el elemento que hay detras del "as". Si quieres imprimir dicho valor, solo necesitas mostrar ese valor.

Si necesitas acceder a la clave, $key contiene 'local'.

Jakala
  • 3,924
  • 1
  • 11
  • 19