Curso de PHP: Nivel Básico – Clase 3. Introducción a los arrays

Esta es la tercera clase del curso de PHP nivel básico. Recuerden que ya hemos visto una introducción en la primera clase y ya hemos estado trabajando con operadores y tipos de datos en la segunda. Hoy vamos a avanzar con un tipo de dato que expliqué por encima antes pero que ahora llegó el momento de analizar en detalle. Estoy hablando de los arrays. En esta clase los empezaremos a conocer y avanzaremos bastante, pero dejaremos algunas cosas vinculadas a ellos para más adelante. Esto es debido a que se hacen más interesantes cuantos más conocimientos tenemos del lenguaje PHP.

¿Qué es un array?

Un array, arreglo o vector es una colección o lista de datos que se agrupan de forma contigua en la memoria de la computadora, pero que se puede referenciar utilizando una misma variable más algún índice. Antes definíamos las variables con un único valor, ahora, podrán tener más de uno. Un array se define de alguna de las siguientes maneras:

Como ven, se pone el nombre como si fuera una variable. Luego, verán que hay dos tipos de definiciones. La primera, explicita, requiere el uso de la palabra array seguido de un paréntesis que debe tener los datos que se guardarán.

Los arrays en PHP son distintos a los de otros lenguajes, así que quien tenga experiencia en otra tecnología deberá entender algunos aspectos básicos que diferencian a PHP. Un array en PHP guarda datos del tipo clave -> valor (key->value). A cada uno de estos pares se le llama elemento.

Como ven en la segunda definición del ejemplo, entre paréntesis se especifican los elementos separados por comas. A su vez, cada elemento, se define con una clave y un valor, separados por =>. La clave va del lado izquierdo y el valor del lado derecho. Por convención, la clave es la forma que se tiene de identificar el valor y el este es el dato que se quiere guardar.

En la primera de las definiciones no hay una asignación de clave -> valor ¿Por qué? Porque PHP no obliga al programador a definir una clave, sí un valor. Esto quiere decir que en ese caso, PHP asignará automáticamente las claves. Siempre que esto ocurra, el lenguaje asociará el primer valor con la clave 0, el segundo con 1, el tercero con 2 y así sucesivamente.

Como puede ver en la tercera definición del ejemplo, tanto las claves como los valores pueden ser cualquier tipo de dato de los que conocemos. E incluso, pueden mezclarse. Se pueden usar enteros, flotantes y cadenas de caracteres como claves y valores.

La cuarta definición no incluye ninguna clave y ningún valor. Esto significa que se está creando un array vacío.

Veamos ahora el otro tipo de definición de arrays utilizando el operador [ ]. Si observan la primera definición de este tipo, verán que se ponen unos corchetes del lado izquierdo de la asignación. Dentro de ellos, va la clave que se quiere utilizar. Del lado derecho de la asignación, se pone el valor. En la definición que aparece abajo, pueden ver otro ejemplo, en ese caso la clave es una cadena de caracteres.

Usando esta forma, se define un array de un solo valor, pero si se repite en varias oportunidades, puede obtenerse uno de mayor tamaño. Si por ejemplo hacemos:

Estamos obteniendo exactamente el mismo array que en la segunda definición explícita. Es decir, que tenemos dos formas de declarar lo mismo.

¿Para qué sirven los arrays?

Hasta acá, todo muy lindo, pero… ¿para qué sirve todo esto? ¿para qué quisiéramos meter muchos valores dentro de una única variable? ¿Qué es esto de las claves y los valores? ¿No estábamos bien con un valor por variable? ¿Para qué empezar a complicar todo? La respuesta a todas estas preguntas es que los arrays permiten manejar de forma más fácil y cómoda la información. Con ellos es posible agrupar, recorrer, buscar y ordenar colecciones de datos de forma sencilla.

Arrays enumerativos

Son los que tienen números en las claves. Tienen la estructura de vector típica de la mayoría de los lenguajes de programación. Como ya vimos, cuando se define un array y no se le especifica la clave, PHP asigna directamente valores numéricos ordenados a partir del 0, es decir que crea un array enumerativo.

Arrays asociativos

Son los que tienen claves de tipo caracter o cadena de caracteres. A veces se los conoce como mapas en otros lenguajes. A PHP no le molesta que se defina en un mismo array claves o índices numéricos y también de caracteres, como ya mencioné antes. A estos se los conoce como arrays mixtos, ya que son una mezcla de los enumerativos y de los asociativos.

Agregar elementos a un array

Ya vimos como definir un array. Y hemos visto una forma de agregar elementos, definiendo la clave con el operador [ ]. Pero ¿qué ocurre si no ponemos ninguna clave y agregamos un valor?

Tenemos un array de superhéroes. Pero debajo queremos agregar uno más, sólo que no le especificamos una clave. ¿Qué pasará? La respuesta es que el valor ‘mujer maravilla’ será agregada al array con la clave 5. ¿Por qué 5? Porque PHP cuando necesita asignar una clave busca la clave numérica más grande que tenga el array, y elige la siguiente. En este caso, la clave numérica más grande es 4, por eso asigna el nuevo valor a la clave 5. Como ven, el hecho de que haya elementos asociativos no influye.

Imprimir arrays por pantalla

Si queremos ver un elemento de un array por pantalla hacemos lo siguiente:

Y obtenemos:

Tiene sentido, usamos la función para imprimir variables y utilizamos el array como si fuera una variable, especificando la clave cuyo elemento queremos imprimir. De esta misma forma hubiéramos podido incluir $heroes[2] dentro de una expresión para realizar una operación matemática (si incluyera un número como valor, por supuesto).

Pero qué ocurre si queremos imprimir todo el array. Existen formas de recorrer el array e ir imprimiendo elemento por elemento. Pero eso lo dejamos para más adelante.

Por ahora, vamos utilizar dos funciones que todo programador PHP debe conocer: var_dump y print_r. Veamos un ejemplo con una de las primeras definiciones que vimos:

La salida de ese código nos dará lo siguiente:

Ambas funciones nos imprimen no sólo el contenido del array sino también la estructura. Primero, print_r nos dice que se tiene un array y nos muestra las claves y los valores. Las claves aparecen entre corchetes y los valores sueltos tras el =>.

var_dump es más completa. Nos dice que se trata de un array de 3 elementos (el número entre paréntesis) y nos muestra la estructura interna, indicando además los tipos de datos.

Es raro en PHP tener que mostrar de esta manera los arrays, pero eso no significa que estas funciones no sirvan. Sirven y mucho a los programadores cuando se está aún en fase de desarrollo. La posibilidad de analizar la estructura de los datos puede convertirse en una herramienta clave para depurar el código fuente.

Operaciones sobre arrays

Al igual que las variables tenían sus operadores que modificaban sus valores o las combinaban entre sí, los arrays también pueden afectarse con algunas funciones y operaciones. No hemos visto funciones aún de manera formal. Pero pueden considerarlas idénticas a las funciones matemáticas o las que usan en la calculadora. No son más que transformaciones que se aplican a los parámetros que reciben y luego, devuelven un resultado de esta transformación. Empecemos el recorrido.

Comparar arrays

Aún no hemos visto expresiones de comparación. Las veremos en la clase que viene. Por ahora, pueden ir sabiendo que una expresión encerrada por paréntesis con un operador de comparación devolverá true o false según sea esa comparación cierta o falsa. Aquí vamos a ver como comparar dos arrays para saber si son iguales o no.

Se definen tres arrays distintos. Luego se comparan con el operador == que sirve para verificar igualdades. El operador != sirve para verificar desigualdades. Ya los veremos en profundidad. El primer var_dump devuelve false y el segundo, true.

Contar elementos de un array

Para eso usaremos una función super útil que se llama count. Su uso es muy sencillo y se ve en el siguiente ejemplo:

Definimos un array con 4 elementos. Luego usamos la función count que encierra entre paréntesis el array. Ahí se cargará el número de elementos que tenga. La salida de este código es.

Buscar en un array

No es una búsqueda realmente, pero sí es una forma de saber si un array posee un determinado valor entre todos los elementos. Se usa la función in_array() que necesita dos parámetros (son los que aparecen entre paréntesis). Primero, el valor a buscar y luego el array. Devuelve 1 si el valor está en el array o 0 si no está.

La salida de este código es:

También pueden verificar si una clave existe. Eso se hace con array_key_exists que funciona de forma parecida a in_array.

Eliminar elementos de un array

Es realmente muy fácil. Se usa la función unset. Veamos un ejemplo para entender.

Entre paréntesis se pone el array con la clave cuyo elemento se desea eliminar. Veamos el antes y el después de borrar un elemento de un array.

Como ven, el elemento 2 ha desaparecido por completo.

Flipping

Hacer un flip de un array es invertir las claves y los valores. Es decir, donde está la clave de un elemento, se pone su valor y donde está su valor, se pone su clave. Se utiliza para ello la función array_flip.

El resultado es:

Invertir array

Si lo que se busca es invertir el orden de los elementos de un array, entonces se debe usar array_reverse

El resultado es:

Si lo comparan con el array original, verán el primer elemento pasó a ser el último y el último, el primero. En este caso son solo 3 elementos por lo que el del medio no se modificó, pero si hubiera más se habrían ordenado. Deben tener especial atención con esta función porque una de las cosas que realiza es destruir las claves. En este caso las invirtió simplemente, pero si se hubiera encontrado con claves asociativas, las hubiera descartado para lograr el ordenamiento.

Obtener un elemento al azar de un array

Algo que puede resultar muy  útil es obtener un elemento de forma aleatoria entre todos los que tiene un array. Para ello, se puede utilizar la función array_rand.

Si prestan atención, verán que esta función no se aplica directamente sobre el array. array_rand lo que hace es buscar una clave al azar y eso es lo que devuelve. La clave no es el valor, pero si se quiere el valor, se puede hacer lo que se ve en el ejemplo. Se pone la función dentro de los corchetes del array para que se termine imprimiendo el valor.

La salida de ese código es:

Si prueban este código, o si usan el que pongo al final del artículo, verán que el valor que va a salir cambia cada vez que refrescan la página. Esto es porque es realmente aleatorio.

Ordenamiento de arrays

Los algoritmos de ordenamientos de datos son toda una rama dentro de la informática. Por suerte, PHP nos simplifica esto con una serie de funciones para ordenar arrays. En este ejemplo solo voy a explicar sort que es la más genérica. Pero existen otras que ordenan (o desordenan) de distintas formas.

La salida de este código es:

Como ven, sort ordena de forma alfabética o numérica en caso de tener números en los valores. En el siguiente enlace les dejo una lista de funciones que ordenan de forma distinta: Funciones de ordenamiento

Arrays como conjuntos

Otra forma de utilizar los arrays es como conjuntos. Sí, como seguramente los han visto en álgebra en algun curso de matemática. Tal vez los hayan estudiado ayudados de diagramas de Venn.

En programación se suele conocer a los conjuntos como set y en algunos lenguajes, Pascal por ejemplo, son un tipo de dato específico. Recuerdo que cuando empecé en la Universidad con ese lenguaje, el uso de los set era casi exclusivamente para validar datos. Sin embargo, la aplicación de los arrays como conjuntos sirve para todas las aplicaciones mismas de los conjuntos, que como ya sabrán (o no) son amplias.

Veamos un ejemplo

La definición es idéntica a la de un array común. Pero con el operador suma (+) y otras dos funciones, pueden operarse como conjuntos. Como ven en el ejemplo, la suma de dos arrays es equivalente a la unión de dos conjuntos. La función array_diff realiza la resta o diferencia del primer conjunto menos el segundo. La función array_intersect realiza la intersección de dos conjuntos y devuelve aquellos elementos que se tienen en común.

La salida de este código es:

Últimas consideraciones

No vamos a avanzar más por hoy con la parte teórica. Pero es importante destacar algunos aspectos de los arrays.

En primer lugar, los arrays sirven para manejar datos homogéneos. Esto quiere decir que cada array debería tener el mismo tipo de valores para todos los elementos. En los lenguajes de programación tipados (C, Pascal, Java) los arrays son de un único tipo de dato. PHP permite mezclarlos, lo cual puede confundir un poco al programador que recién se inicia. Espero que en los ejercicios propuestos quede claro que, en general, siempre usaremos el mismo tipo de dato para cada array.

Por otro lado, los arrays son variables comunes si se usan de la forma $miArray[0]. Pueden combinarse e incluirse en expresiones donde también hayan variables, constantes u otros elementos de arrays.

Más adelante, vamos a conocer las estructuras cíclicas que permiten manejar los arrays de maneras más sencillas como el bucle for y el foreach.

Parte del código fuente utilizado para este artículo lo pueden ver aquí: Código fuente de arrays en PHP.

El resultado de ese código lo encuentran aquí: Resultado de arrays en PHP

Ejercicios propuestos

  1. Definir un array con valores numéricos. Realizar la suma de todos los valores y guardarlo en una variable. Mostrar la suma por pantalla.
  2. Definir un array que tenga claves de un caracter representando cada letra del alfabeto desde la a hasta la f. En la misma definición, asignarle a cada clave un nombre propio que comience con esa letra. Ejemplo array (‘a’=>’Amanda’); Mostrar el resultado por pantalla con var_dump
  3. Definir un array que tenga como valor diez títulos de películas. Utilizar la función sort para ordenarlos de forma alfabética y mostrarlo por pantalla con print_r.
  4. Definir tres arrays: uno puramente asociativo, otro puramente enumerativo y otro mixto. Luego, guardar en una variable la suma de los elementos de los tres arrays y mostrarla por pantalla.
  5. Dado el siguiente array: $paises = array (‘alemania’,’brasil’,’italia’,’chile’,’uruguay’,’australia’) Se pide lo siguiente
    1. Eliminar los elementos ‘alemania’, ‘italia’ y ‘australia’
    2. Insertar los elementos ‘argentina’ y ‘bolivia’
    3. Ordenar por orden alfabético el array
    4. Mostrar el resultado por pantalla con print_r
  6. Realizar un dado virtual en PHP mediante el uso de arrays. Cada vez que se refresque la pantalla, deberá verse un número distinto al azar entre 1 y 6
  7. Realizar una ruleta virtual en PHP, de la misma manera que con el dado.

Bibliografía

  • Zend PHP5 Certification Study Guide, de Davey Shafik con Ben Ramsey
Soy programador web y me desempeño como Líder Técnico en Polar Bear Development. Trabajo con tecnologías como PHP, Javascript, MySQL y HTML5 para el desarrollo de sitios y sistemas web. Me especializo en Zend Framework 2 y otros frameworks MVC, como también en WordPress y otros CMS. Lidero equipos de desarrolladores trabajando con Scrum. Vivo en Buenos Aires, Argentina.
 

One thought on “Curso de PHP: Nivel Básico – Clase 3. Introducción a los arrays

  1. Primero que todo muchas gracias por el curso, solo queria comentarte que hay un error en lo siguiente…

    echo ‘Union’;
    $union = $conjA + $conjB;
    echo ‘Union (A U B): ‘;
    print_r($conjB); <-Deberia ser $union en vez de $conjB

    echo 'Diferencia’;
    $diferencia = array_diff($conjB,$conjA);
    echo ‘A – B: ‘; <-En realidad es B – A
    print_r($diferencia);

    Saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *


*