Arrays en PHP
Un array en PHP es un tipo especial de datos que representa los llamados mapas ordenados de datos. Un mapa es un tipo de datos que asocia valores con claves, también llamado ‘array asociativo’.
Los valores que almacenamos en un array no tienen por qué ser del mismo tipo como ocurre en otros lenguajes de programación. La posibilidad de utilizar como valores de un array otros arrays, árboles, les permite la definición de arrays multidimensionales.
Los arrays están optimizados para varios usos diferentes:
- Vectores: lista de datos unidimensional a los que se accede por medio de su posición llamada índice.
- Matriz: lista de datos bidimensional formada por filas y columnas, a los que se accede por medio de su posición de fila y columna.
- Multidimensional: lista de datos de tres o más dimensiones, a los que se accede por medio de su posición indicando el índice o clave de cada una de sus dimensiones.
- Tabla asociativa: implementación de un mapa donde se asocia a cada valor una clave de acceso. Puede aplicarse tanto a vectores, matrices como a arreglos multidimensionales.
PHP soporta tanto arrays escalares (índice numérico), como arrays asociativos (índice por clave).
Para acceder a los elementos de un array se utilizan los corchetes [], dentro de los cuales se indicará un índice o clave de localización.
A diferencia de otros lenguajes en PHP no hace falta definir el array antes de utilizarlo. Cuando se definen elementos de un array, PHP reconoce automáticamente que se trata de un array sin necesidad de declaración previa.
Definir un Array
En PHP podemos definir arrays utilizando el constructor del lenguaje array() o utilizando la notación de corchetes [] también llamada sintaxis corta de array() (a partir de PHP 5.4).
Si a la hora de definir el array no se indican los valores, estaremos creando un array vacío.
Especificación con array()
array(Valor1, Valor2, Valor3, ….); array(); -> Array vacío
$numeros = array(10, 20, 30, 40, 50); $nombres = array('Luis', 'Juan', 'Pedro'); $vacio = array();
Notación [ ] (corchetes)
[Valor1, Valor2, Valor3, ….]; [] -> Array vacío
$numeros = [10, 20, 30, 40, 50]; $nombres = ['Luis', 'Juan', 'Pedro']; $vacio = [];
Aunque PHP soporta estas dos sintaxis, se recomienda utilizar la notación de corchetes, que será la que utilizaré para todos los ejemplos que se muestren en este módulo.
Asignar valores
Para asignar valores a los elementos de un array, utilizaremos la sintaxis:
$NombreArray[IndiceClave]=ValorAsignado;
$elementos[10]=100.25; $elementos[11]=50; $elementos['Precio']=9.99;
PHP admite también otra posibilidad que no admiten otros lenguajes: se pueden asignar valores a un array sin especificar el índice, ya que PHP los coloca automáticamente al final de los elementos existentes.
$NombreArray[]=ValorAsignado;
$elementos[]=100.25; $elementos[]=50;
Eliminar y Vaciar elementos: unset() y NULL
Si queremos eliminar algún elemento del array, utilizaremos la función unset() indicando como argumento la variable de tipo array y el índice o clave del elemento que deseamos eliminar.
¡OJO!: una vez eliminado el elemento, PHP no reorganiza los índices del resto de los elementos, es decir; si eliminamos el elemento [3], el índice 3 del array habrá desaparecido y si intentamos acceder de nuevo al elemento utilizando ese número de índice se producirá un error de ejecución.
// Definimos un array de 4 elementos $numeros=[10,20,30,40]; echo $numeros[2]; // Mostramos el elemento con índice 2 (30) unset($numeros[2]); // Eliminamos el elemento echo $numeros[3]; // Ahora el elemento que está en la tercera posición será el que tiene el índice 3 (40) // Si intentamos acceder al elemento con índice 2, se producirá un error de ejecución echo $numeros[2]; // Notice: Undefined offset: 2
Para mantener el orden de los índices después de eliminar un elemento, tendremos que reasignar los valores al array con la función array_values().
// Definimos un array de 4 elementos $numeros=[10,20,30,40]; unset($numeros[2]); // Eliminamos el elemento con índice 2 (30) $numeros= array_values($numeros); // Ahora reasignamos al array los valores echo $numeros[2]; // Mostramos el elemento con índice 2 (40)
Si lo que deseamos es eliminar el contenido (su valor) pero no el elemento, lo único que tenemos que hacer es asignarle un valor vacío o nulo al elemento. De esta manera los índices seguirán siendo los mismos, pero habremos vaciado el contenido del elemento.
// Definimos un array de 4 elementos $numeros=[10,20,30,40]; // Mostramos el elemento que está en la tercera posición echo $numeros[2]; // 30 // Vaciamos el elemento $numeros[2]=NULL; // o también $numeros[2]=''; // Ahora el elemento está vacío echo $numeros[2]; // No mostrará nada
Contar los elementos de un array: count()
Para contar los elemento que componen un array utilizamos la función count() indicando como argumento la variable de tipo array.
<?php $numeros=[10,20,30,40]; echo count($numeros); // 4 ?>
Si deseamos contar todos los elementos de un array multidimensional, tendremos que indicar la constante COUNT_RECURSIVE como segundo argumento de la función count().
<?php $matriz_numeros=[[2,4,6,8],[5,10,15,20],[10,20,30,40]]; // 15 (ya que se tienen en cuenta los 3 elementos de la primera dimensión echo count($matriz_numeros, COUNT_RECURSIVE); ?>
Mostrar su estructura y contenido: print_r()
Si en algún momento deseamos mostrar el contenido de una array para ver de una forma más comprensible su estructura, PHP nos ofrece la función print_r() que como se nos indica en la web www.php.net ‘Imprime información legible para humanos sobre una variable’.
Para que la visualización de la estructura y sus elementos sea correcta se recomienda encerrar la salida de la función print_r() entre etiquetas <pre> y </pre> de HTML.
<?php $numeros=[10,20,30,40]; $matriz_numeros=[[2,4,6,8],[5,10,15,20],[10,20,30,40]]; ?> <pre> <?php echo '<strong>$numeros</strong><br>'; // Mostramos literal con el nombre del array print_r($numeros); // Imprimir estructura y contenido del array ?> </pre> <pre> <?php echo '<strong>$matriz_numeros</strong><br>'; // Mostramos literal con el nombre del array print_r($matriz_numeros); // Imprimir estructura y contenido del array ?> </pre>