# Matrices

## Qué es una matriz

Una matriz es un tipo de variable que puede almacenar varios valores a la vez. En las matrices de una dimensión (que a veces se llaman vectores) cada elemento se identifica por un índice que se escribe entre corchetes ($matriz[$indice]). Pero las matrices pueden tener más dimensiones (como las matrices matemáticas) y entonces los elementos se identifican por varios índices que se escriben cada uno entre corchetes ($matriz[$indice1][$indice2]...).

En otros lenguajes de programación, los índices de las matrices tienen que ser números enteros positivos y tienen que estar todos definidos, pero en PHP se dice que las matrices son asociativas porque los índices no tienen por qué ser números y cuando son números no tienen por qué ser valores correlativos.

    <?php
    $matriz[5] = 25;
    $matriz[3] = 12;

    print "<pre>"; print_r($matriz); print "<pre>";
    ?>
    Array
    (
        [5] => 25
        [3] => 12
    )
    <?php
    $matriz['pepe']['edad'] = 25;
    $matriz['juan']['peso'] = 75;

    print "<pre>"; print_r($matriz); print "<pre>";
    ?>
    Array
    (
        [pepe] => Array
            (
                [edad] => 25
            )

        [juan] => Array
            (
                [peso] => 75
            )
    )

Volver al principio de la página

## Crear una matriz

Una matriz se puede crear definiendo algún valor de la matriz

    <?php
    $matriz[5] = 25;

    print "<pre>"; print_r($matriz); print "<pre>";
    ?>
    Array
    (
        [5] => 25
    )

o utilizando la función array($indice => $valor, ...):

    <?php
    $matriz = array( 5 => 25);

    print "<pre>"; print_r($matriz); print "<pre>";
    ?>
    Array
    (
        [5] => 25
    )

Las matrices en PHP son matrices asociativas, es decir, que los índices no tienen por qué ser números enteros positivos:

    <?php
    $matriz[5] = 25;
    $matriz[-1] = "negativo";
    $matriz["número 1"] = "cinco";

    print "<pre>"; print_r($matriz); print "<pre>";
    ?>
    Array
    (
        [5] => 25
        [-1] => negativo
        [número 1] => cinco
    )
    <?php
    $matriz = array( 5 => 25, -1 => "negativo", "número 1" => "cinco");

    print "<pre>"; print_r($matriz); print "<pre>";
    ?>

Las matrices en PHP pueden ser multidimensionales:

    <?php
    $matriz[5][3] = 25;
    $matriz["letras"][1] = "letra A";

    print "<pre>"; print_r($matriz); print "<pre>";
    ?>
    Array
    (
        [5] => Array
            (
                [3] => 25
            )
        [letras] => Array
            (
                [1] => letra A
            )
    )
    <?php
    $matriz = array(5 => array(3 => 25), "letras" => array(1 => "letra A"));

    print "<pre>"; print_r($matriz); print "<pre>";
    ?>

Volver al principio de la página

## Imprimir todos los valores de una matriz: la función print_r()

La función print_r($variable [, $devolver]) escribe la variable $variable de forma legible, incluso aunque se trate de una matriz.

Aunque print_r() genera espacios y saltos de línea que pueden verse en el código fuente de la página, print_r() no genera etiquetas html, por lo que el navegador no muestra esos espacios y saltos de línea.

    <?php
    $matriz = array('nombre' => 'Pepito', 'apellidos' => 'Conejo');
    print_r($matriz);
    ?>
| Array ( [nombre] => Pepito [apellidos] => Conejo )

Para mejorar la legibilidad una solución es añadir la etiqueta <pre>, que fuerza al navegador a mostrar los espacios y saltos de línea.

    <?php
    $matriz = array('nombre' => 'Pepito', 'apellidos' => 'Conejo');
    print '<pre>'; print_r($matriz); print '</pre>';
    ?>
    Array
    (
        [nombre] => Pepito
        [apellidos] => Conejo
    )

Si el argumento $devolver toma el valor TRUE, print_r() no escribe nada pero devuelve el texto que se escribe cuando el argumento no está o toma el valor FALSE.

Si el argumento $devolver no está o toma el valor FALSE, print_r() devuelve 1 (TRUE).

    <?php
    $matriz = array('nombre' => 'Pepito', 'apellidos' => 'Conejo');
    $tmp = print_r($matriz, TRUE);
    print "<p>La matriz es $tmp</p>";
    ?>
| La matriz es Array ( [nombre] => Pepito [apellidos] => Conejo )
    <?php
    $matriz = array('nombre' => 'Pepito', 'apellidos' => 'Conejo');
    $tmp = print_r($matriz, FALSE);
    print "<p>La matriz es $tmp</p>";
    ?>
| Array ( [nombre] => Pepito [apellidos] => Conejo ) La matriz es 1
    <?php
    $matriz = array('nombre' => 'Pepito', 'apellidos' => 'Conejo');
    $tmp = print_r($matriz);
    print "<p>La matriz es $tmp</p>";
    ?>
| Array ( [nombre] => Pepito [apellidos] => Conejo ) La matriz es 1

Volver al principio de la página

## Borrar una matriz o elementos de una matriz

La función unset() permite borrar una matriz o elementos de una matriz .

    <?php
    $matriz = array( 5 => 25, -1 => "negativo", "número 1" => "cinco");

    print "<pre>"; print_r($matriz); print "<pre>";

    unset ($matriz[5]);

    print "<pre>"; print_r($matriz); print "<pre>";
    ?>
    Array
    (
        [5] => 25
        [-1] => negativo
        [número 1] => cinco
    )

    Array
    (
        [-1] => negativo
        [número 1] => cinco
    )
    <?php
    $matriz = array( 5 => 25, -1 => "negativo", "número 1" => "cinco");

    print "<pre>"; print_r($matriz); print "<pre>";

    unset ($matriz);

    print "<pre>"; print_r($matriz); print "<pre>";
    ?>
    Array
    (
        [5] => 25
        [-1] => negativo
        [número 1] => cinco
    )

    Notice:  Undefined variable: matriz in prueba.php on line 8

Volver al principio de la página

## Contar elementos de una matriz

La función count($matriz) permite contar los elementos de una matriz.

    <?php
    $matriz[3] = 25;
    $matriz[4] = 30;
    $matriz[5] = 35;
    $matriz["letra"] = "letra A";

    $elementos = count($matriz);

    print "<p>La matriz tiene $elementos elementos.</p>";
    print "<pre>"; print_r($matriz); print "<pre>";
    ?>
| La matriz tiene 4 elementos.
    Array
    (
        [3] => 25
        [4] => 30
        [5] => 35
        [letra] => letra A
    )

En una matriz multidimensional, la función count($matriz)devolvería simplemente el número de elementos del primer índice:

    <?php
    $matriz[5][3] = 25;
    $matriz[5][4] = 30;
    $matriz[5][5] = 35;
    $matriz["letra"][1] = "letra A";

    $elementos = count($matriz);

    print "<p>La matriz tiene $elementos elementos.</p>";
    print "<pre>"; print_r($matriz); print "<pre>";
    ?>
| La matriz tiene 2 elementos.
    Array
    (
        [5] => Array
            (
                [3] => 25
                [4] => 30
                [5] => 35
            )
        [letra] => Array
            (
                [1] => letra A
            )
    )

Para contar todos los elementos de una matriz multidimensional, habría que utilizar la función count($matriz, COUNT_RECURSIVE).

    <?php
    $matriz[5][3] = 25;
    $matriz[5][4] = 30;
    $matriz[5][5] = 35;
    $matriz["letra"][1] = "letra A";

    $elementos = count($matriz, COUNT_RECURSIVE);

    print "<p>La matriz tiene $elementos elementos.</p>";
    print "<pre>"; print_r($matriz); print "<pre>";
    ?>
| La matriz tiene 6 elementos.
    Array
    (
        [5] => Array
            (
                [3] => 25
                [4] => 30
                [5] => 35
            )
        [letra] => Array
            (
                [1] => letra A
            )
    )

Es importante fijarse en que en este caso la función count() está contando también las dos matrices fila. Si quisieramos contar únicamente los elementos de una matriz bidimensional habría que restar el número de matrices fila:

    <?php
    $matriz[5][3] = 25;
    $matriz[5][4] = 30;
    $matriz[5][5] = 35;
    $matriz["letra"][1] = "letra A";

    $elementos = count($matriz, COUNT_RECURSIVE)-count($matriz);

    print "<p>La matriz tiene $elementos elementos.</p>";
    print "<pre>"; print_r($matriz); print "<pre>";
    ?>
| La matriz tiene 4 elementos.
    Array
    (
        [5] => Array
            (
                [3] => 25
                [4] => 30
                [5] => 35
            )
        [letra] => Array
            (
                [1] => letra A
            )
    )

Volver al principio de la página

## Máximo y mínimo

La función max($matriz, ...) devuelve el valor máximo de una matriz (o varias). La función min($matriz, ...) devuelve el valor mínimo de una matriz (o varias).

    <?php
    $valores = array (10, 40, 15, -1);
    $maximo = max($valores);
    $minimo = min($valores);

    print "<pre>"; print_r($valores); print "<pre>";
    print "<p>El máximo de la matriz es $maximo.</p>";
    print "<p>El mínimo de la matriz es $minimo.</p>";
    ?>
    Array
    (
        [0] => 10
        [1] => 40
        [2] => 15
        [3] => -1
    )
El máximo de la matriz es 40. El mínimo de la matriz es -1.

Los valores no numéricos se tratan como 0, pero si 0 es el mínimo o el máximo, la función devuelve la cadena.

    <?php
    $valores = array (10, 40, 15, 'abc');
    $maximo = max($valores);
    $minimo = min($valores);

    print "<pre>"; print_r($valores); print "<pre>";
    print "<p>El máximo de la matriz es $maximo.</p>";
    print "<p>El mínimo de la matriz es $minimo.</p>";
    ?>
    Array
    (
        [0] => 10
        [1] => 40
        [2] => 15
        [3] => abc
    )
El máximo de la matriz es 40. El mínimo de la matriz es abc.

Volver al principio de la página

## Encontrar un valor en una matriz

La función booleana in_array($elemento, $matriz[, $tipo]) devuelve TRUE si el elemento se encuentra en la matriz. Si el argumento booleano $tipo es TRUE, in_array() comprueba además que los tipos coincidan.

    <?php
    $valores = array (10, 40, 15, -1);

    print "<pre>"; print_r($valores); print "<pre>";
    if (in_array(15, $valores)) {
      print "<p>15 está en la matriz \$valores.</p>";
    }
    if (!in_array(25, $valores)) {
      print "<p>25 no está en la matriz \$valores.</p>";
    }
    if (!in_array("15", $valores, TRUE)) {
      print "<p>\"15\" no está en la matriz \$valores.</p>";
    }
    ?>
    Array
    (
        [0] => 10
        [1] => 40
        [2] => 15
        [3] => -1
    )
15 está en la matriz $valores. 25 no está en la matriz $valores. "15" no está en la matriz $valores.

Volver al principio de la página

Esta o a está bajo una licencia de Creative Commons Reconocimiento-CompartirIgual 3.0 España.