Menu

PHP array_column(): obtener una columna de las filas

array_column($rows, 'email') devuelve el campo email de cada fila como un array plano. Aprende el argumento de clave de índice, a reindexar filas por id, a usarlo con objetos y a encontrar una fila con array_search.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

array_column($rows, $column) devuelve el valor de $column de cada fila de una lista de filas. Convierte una tabla de registros en un array plano de un solo campo, que es lo que necesitas antes de implode, in_array, array_sum o array_search.

Las filas pueden venir de cualquier sitio: una respuesta JSON decodificada, un archivo CSV o una consulta a una base de datos que devolvió un array de arrays asociativos.

Usar la clave de índice para construir pares clave valor

El tercer argumento indica un campo cuyo valor se convierte en la clave de cada resultado. array_column($users, 'name', 'id') es la forma habitual de construir una tabla de búsqueda de id a nombre, por ejemplo para una lista <select>.

Si dos filas comparten el mismo valor de índice, la fila posterior sobrescribe a la anterior.

Indexar filas completas por id con null

Pasa null como columna para conservar cada fila completa, con la clave del campo de índice. Buscar una fila por id pasa a ser un acceso directo por clave en lugar de un bucle.

Construye el índice una vez y cada búsqueda posterior es instantánea, lo que importa cuando buscas muchos ids dentro de un bucle.

Encontrar una fila con array_column y array_search

Para saber qué fila tiene un valor dado, busca en la columna y usa la posición que obtienes. Comprueba el resultado con !== false, porque una coincidencia en la primera fila devuelve 0.

Esto depende de que $users tenga las claves 0, 1, 2, porque array_column devuelve una lista. Si el array se filtró y tiene huecos, llama antes a array_values($users). La página de array_search explica en detalle la trampa de false frente a 0.

Sumar, contar o promediar una columna

array_column combina bien con las funciones matemáticas: extrae el campo y luego súmalo.

Para un valor calculado a partir de varios campos, como cantidad por precio, la herramienta es array_map, como en la última línea.

array_column con objetos

Con una lista de objetos, array_column lee las propiedades públicas. Las propiedades privadas y protegidas no son visibles para ella.

La segunda llamada devuelve un array vacío: password es privada, así que se salta cada objeto.

Las filas a las que les falta el campo se saltan

array_column no rellena un valor de relleno para una fila que no tiene el campo. El resultado puede ser más corto que la entrada, así que sus posiciones dejan de coincidir con las filas.

El primer resultado tiene dos teléfonos y ninguna pista de que Bob no tenía. Con el nombre como clave de índice, puedes ver de quién es cada número, que es la forma más segura siempre que a algunas filas les pueda faltar el campo.

Preguntas frecuentes

¿Qué hace array_column en PHP?

Recibe una lista de filas (arrays u objetos) y devuelve el valor de un campo de cada fila: array_column($users, 'email') da un array plano de emails. Las filas que no tienen el campo se saltan.

¿Cómo creo un array clave valor a partir de filas?

Pasa el campo de la clave como tercer argumento: array_column($users, 'name', 'id') devuelve [id => name, ...]. Pasa null como segundo argumento, array_column($users, null, 'id'), para conservar las filas completas indexadas por id.

¿Qué hace array_column cuando a una fila le falta el campo?

Se salta esa fila, así que array_column($people, 'phone') puede devolver menos valores que filas y las posiciones dejan de coincidir. Añade una clave de índice, array_column($people, 'phone', 'name'), para ver de qué fila viene cada valor.

¿array_column funciona con objetos?

Sí, con un array de objetos lee las propiedades públicas, y también las que ofrece __get cuando la clase define __isset. Las propiedades privadas y protegidas se saltan.

Ilustración de los lenguajes de programación de Coddy

Aprende a programar con Coddy

COMENZAR