Manual de PHP: Matrices

Definir los elementos de una matriz

En PHP disponemos de dos tipos de matrices, matrices de índice numérico y matrices asociativas, según el índice de los elementos sea un número o una clave.

  • Matrices de índice numérico

    Podemos definir los elementos de una matriz usando índices numéricos:

    <?php
    $ciudad[1] = "Madrid";
    $ciudad[2] = "Caracas";
    $i = 2;
    echo '$ciudad['.$i."] =  ".$ciudad[$i];
    // mostrara "$ciudad[2] = Caracas"
    ?>

    Si no especificamos el índice comenzará desde 0:

    <?php
    $ciudad[] = "Madrid"; // elemento indice 0
    $ciudad[] = "Caracas"; // elemento indice 1
    $ciudad[] = "Roma";
    $ciudad[] = "Sevilla";
    $ciudad[] = "Londres";
    $i = 1;
    echo '$ciudad['.$i."] =  ".$ciudad[$i];
    // mostrara "$ciudad[1] = Caracas"
    ?>

    También se pueden definir los elementos utilizando la función array (comenzará desde 0):

    <?php
    $ciudad = array("Madrid", "Caracas", "Roma", "Sevilla", "Londres");
    $i = 1;
    echo '$ciudad['.$i."] =  ".$ciudad[$i];
    // mostrara "$ciudad[1] = Caracas"
    ?>

    Si cada elemento de una matriz es a su vez otra matriz hablamos de matrices multidimensionales:

    <?php
    $calendario[] = array (1, "enero", 31);
    $calendario[] = array (2, "febrero", 28);
    $calendario[] = array (3, "marzo", 31);
    $calendario[] = array (4, "abril", 30);
    $calendario[] = array (5, "mayo", 31);
    $i = 1;
    $cadena = '$calendario['.$i."]: ";
    $cadena .= $calendario[$i][1];
    $cadena .= " es el mes ".$calendario[$i][0];
    $cadena .= " y tiene ".$calendario[$i][2]." dias";
    echo $cadena;
    // mostrara "$calendario[1]: febrero es el mes 2 y tiene 28 dias"
    ?>

    Las matrices multidimensionales también se pueden definir elemento a elemento:

    <?php
    $a[0][0] = "a";
    $a[0][1] = "b";
    $a[1][0] = "y";
    $a[1][1] = "z";
    $i = 1;
    $j = 1;
    echo '$a['.$i."][".$j."] =  ".$a[$i][$j];
    // mostrara "$a[1][1] = z"
    ?>
  • Matrices asociativas

    En PHP los índices de los elementos de una matriz no tienen que ser números necesariamente. En las matrices asociativas a cada elemento, en vez de índice numérico, se le asigna una clave (key) que tendremos que especificar al definir los elementos de la matriz.

    <?php
    $visitas["lunes"] = 200;
    $visitas["martes"] = 186;
    ?>

    La sintaxis más utilizada para definir matrices asociativas utiliza la función array:

    <?php
    $visitas = array("lunes"=>200, "martes"=>186);
    ?>

    Para desplazarnos por los elementos de una matriz asociativa disponemos de una serie de funciones que actúan sobre el puntero interno que indica la posición:

    • current: devuelve el valor actual del puntero.
    • reset: mueve el puntero al primer elemento.
    • end: mueve el puntero al último elemento.
    • next: mueve el puntero al elemento siguiente.
    • prev: mueve el puntero al elemento anterior.
    • count: devuelve el número de elementos.

    Veamos un ejemplo:

    <?php
    $semana = array("lunes", "martes", "miercoles", "jueves", "viernes",
      "sabado", "domingo");
    echo count($semana); // mostrara 7
    reset($semana); //situamos el puntero en el primer elemento
    echo current($semana); // mostrara lunes
    next($semana); // martes
    end($semana); // domingo
    prev($semana); // sabado
    ?>

Recorrer los elementos de una matriz

Para recorrer los elementos de una matriz tenemos varias opciones.

  • Usando contadores + for

    Con un contador y un bucle for podemos recorrer los elementos de una matriz de índice numérico:

    <?php
    $ciudad = array("Madrid", "Caracas", "Roma", "Sevilla", "Londres");
    $num_elementos = count($ciudad); // numero de elementos
    for ($i=0; $i < $num_elementos; $i++) {
        echo '$a['.$i."] =  ".$ciudad[$i]."<br />";
    }
    ?>

    Las matrices multidimensionales también se pueden recorrer utilizando contadores:

    <?php
    $a[0][0] = "a";
    $a[0][1] = "b";
    $a[1][0] = "y";
    $a[1][1] = "z";
    for ($i = 0; $i <= 1; $i++) {
        for ($j = 0; $j <= 1; $j++) {
            echo '$a['.$i."][".$j."] =  ".$a[$i][$j]."<br />";
        }
    }
    ?>
  • Usando while + list + each

    Con un bucle while y las funciones each y list podemos recorrer los elementos de una matriz de índice numérico:

    <?php
    $a = array("one", "two", "three");
    reset ($a);
    while (list($index, $value) = each ($a)) {
        echo '$a['.$index."] =  ".$value."<br />";
    }
    ?>

    También podemos recorrer los elementos de una matriz asociativa:

    <?php
    $visitas = array("lunes"=>200, "martes"=>186, "miercoles"=>190);
    reset($visitas);
    while (list($key, $value) = each($visitas)) {
        echo '$visitas['.$key."] =  ".$value."<br />";
    }
    ?>

    Igualmente, podemos recorrer los elementos de una matriz multidimensional:

    <?php
    $calendario[] = array (1, "enero", 31);
    $calendario[] = array (2, "febrero", 28);
    $calendario[] = array (3, "marzo", 31);
    $calendario[] = array (4, "abril", 30);
    $calendario[] = array (5, "mayo", 31);
    while (list($index, $value ) = each($calendario)){
        $cadena = '$calendario['.$index."]: ";
        $cadena .= $value[1]." es el mes numero ".$value[0];
        $cadena .= " y tiene ".$value[2]." dias<br />";
        echo $cadena;
    }
    ?>
  • Usando foreach

    El bucle foreach nos permite recorrer los elementos de una matriz de índice numérico:

    <?php
    $a = array("one", "two", "three");
    foreach($a as $index => $value ) {
        echo '$a['.$index."] =  ".$value."<br />";
    }
    ?>

    También podemos recorrer los elementos de una matriz asociativa:

    <?php
    $a = array("juan" => 12, "luis" => 25, "ana" => 37, "pepe" => 17);
    foreach($a as $key => $value) {
        echo '$a['.$key."] = ".$value."<br />";
    }
    ?>

    Del mismo modo, podemos recorrer los elementos de una matriz multidimensional:

    <?php
    $calendario[] = array (1, "enero", 31);
    $calendario[] = array (2, "febrero", 28);
    $calendario[] = array (3, "marzo", 31);
    $calendario[] = array (4, "abril", 30);
    $calendario[] = array (5, "mayo", 31);
    foreach($calendario as $index => $value) {
        $cadena = '$calendario['.$index."]: ";
        $cadena .= $value[1]." es el mes numero ".$value[0];
        $cadena .= " y tiene ".$value[2]." dias<br />";
        echo $cadena;
    }
    ?>

Recursos

Artículos en la categoría "Manual de PHP"

  1. Manual de PHP: Estructuras de control
  2. Manual de PHP: Funciones
  3. Manual de PHP: Objetos
  4. Manual de PHP: Formularios web
  5. Manual de PHP: Imágenes
  6. Manual de PHP: XML
  7. Manual de PHP: MySQL
  8. Manual de PHP: Sesiones
  9. Manual de PHP: Matrices
  10. Manual de PHP: Expresiones regulares
  11. Manual de PHP: Sanear datos de usuario
  12. Manual de PHP: Email
  13. Manual de PHP: Evitar el hotlinking de los buscadores

2 Comments:

  1. como puedo hacer un programa que capture notas de alumnos en matrices php

  2. Excelente aporte, muchísimas gracias. Me has aclarado todas las dudas que tenía.

    Salu2.