W3docs

Entendiendo la función PHP array_column()

La función PHP array_column() extrae valores de arrays multidimensionales y los transforma en nuevos arrays. Muy útil al trabajar con datos de bases de datos.

La función PHP array_column() extrae los valores de una sola columna de un array multidimensional (o un array de objetos) y los devuelve como un nuevo array plano. Es una de las funciones de array más útiles cuando trabajas con datos que provienen de una base de datos, un archivo CSV o una API JSON en forma de lista de registros, ya que te permite extraer exactamente el campo que necesitas en una sola línea, sin escribir un bucle foreach.

Este capítulo cubre la sintaxis de la función, cómo el parámetro opcional index_key re-indexa el resultado, cómo se comporta con arrays de objetos y claves faltantes, casos de uso comunes y los errores a tener en cuenta. Para un contexto más amplio, consulta PHP Arrays y Multidimensional Arrays.

¿Qué es la función array_column()?

La función array_column() es una función integrada de PHP que se utiliza para extraer valores de un array y devolverlos como un nuevo array. Acepta dos parámetros obligatorios: el array del que deseas extraer valores y la clave (o columna) que deseas extraer. La función devuelve un nuevo array que contiene únicamente los valores de la columna especificada.

Esta es la sintaxis básica de la función array_column():

Sintaxis de la función array_column de PHP

array_column(array, column_key, [index_key]);
  • array: Este es el array del que deseas extraer valores.
  • column_key: Esta es la clave (o columna) que deseas extraer.
  • index_key (opcional): Esta es la clave cuyo valor se utiliza como índice (clave) del array devuelto. Pasa null como column_key (desde PHP 7.0) para devolver filas completas re-indexadas por index_key.

La función devuelve un array completamente nuevo; nunca modifica el original. Funciona con arrays cuyos elementos son a su vez arrays u objetos con propiedades públicas.

Cómo usar la función array_column()

Usar la función array_column() es bastante sencillo. Solo necesitas pasar un array y la clave que deseas extraer. Aquí hay un ejemplo que muestra cómo usar array_column():

Ejemplo PHP de la función array_column

<?php

$data = [
    [
        'id' => 1,
        'name' => 'John',
        'age' => 30,
    ],
    [
        'id' => 2,
        'name' => 'Jane',
        'age' => 25,
    ],
    [
        'id' => 3,
        'name' => 'Jim',
        'age' => 35,
    ],
];

$names = array_column($data, 'name');

print_r($names);

?>

La salida de este código sería:

Array
(
  [0] => John
  [1] => Jane
  [2] => Jim
)

En este ejemplo, la función array_column() extrajo los valores de la columna name y los devolvió como un nuevo array indexado numéricamente.

Uso del parámetro index_key

El parámetro index_key te permite especificar una clave para usar como índice del array devuelto. Aquí hay un ejemplo que muestra cómo usar el parámetro index_key:

Ejemplo de la función PHP array_column con más argumentos

<?php

$data = [
    [
        'id' => 1,
        'name' => 'John',
        'age' => 30,
    ],
    [
        'id' => 2,
        'name' => 'Jane',
        'age' => 25,
    ],
    [
        'id' => 3,
        'name' => 'Jim',
        'age' => 35,
    ],
];

$names = array_column($data, 'name', 'id');

print_r($names);

?>

La salida de este código sería:

Array
(
  [1] => John
  [2] => Jane
  [3] => Jim
)

En este ejemplo, array_column() extrajo los valores de la columna name y usó la columna id como clave de cada entrada en el array devuelto. Esta es la forma más rápida de construir una tabla de búsqueda indexada por ID.

Devolver filas completas con column_key null

Desde PHP 7.0 puedes pasar null como column_key. La función entonces conserva cada fila completa pero re-indexa el resultado por index_key. Esto es útil cuando quieres un mapa de registros por ID en lugar de un único campo:

<?php

$data = [
    ['id' => 1, 'name' => 'John', 'age' => 30],
    ['id' => 2, 'name' => 'Jane', 'age' => 25],
];

$byId = array_column($data, null, 'id');

print_r($byId);

?>
Result

Trabajar con arrays de objetos

array_column() también lee propiedades públicas de objetos, por lo que puedes usarla con una lista de instancias de modelo exactamente igual que con arrays:

<?php

class User {
    public function __construct(public int $id, public string $name) {}
}

$users = [
    new User(1, 'John'),
    new User(2, 'Jane'),
];

print_r(array_column($users, 'name', 'id'));

?>
Result

Errores a tener en cuenta

  • Las claves faltantes se omiten silenciosamente. Si una fila no contiene column_key, esa fila simplemente se omite del resultado sin generar ninguna advertencia. Del mismo modo, una fila que carece de index_key vuelve a una clave numérica secuencial.
  • Los valores duplicados de index_key se sobreescriben entre sí. Dado que las claves deben ser únicas, si dos filas comparten el mismo index_key, solo sobrevive la última.
  • Solo se leen las propiedades públicas de los objetos. Las propiedades protegidas y privadas se ignoran a menos que la clase implemente accesores mágicos.

Casos de uso de array_column()

La función array_column() puede utilizarse en diversas situaciones en las que necesitas extraer valores de arrays y devolverlos como un nuevo array. Aquí hay algunos casos de uso comunes:

  • Extraer valores de arrays multidimensionales para crear una lista simple
  • Crear un array asociativo a partir de un array multidimensional
  • Transformar un array multidimensional en un array unidimensional para usarlo en una lista desplegable u otro elemento de formulario

Si también necesitas transformar cada valor mientras lo extraes, usa array_map(); para conservar solo las filas que cumplan una condición, consulta array_filter().

Conclusión

La función array_column() es una herramienta concisa para extraer una sola columna de arrays multidimensionales y arrays de objetos. Con el index_key opcional puedes re-indexar el resultado en un solo paso, y con un column_key null puedes crear mapas de búsqueda de registros completos. Usarla en lugar de un bucle foreach escrito a mano hace que el código de transformación de datos sea más corto y fácil de leer.

Práctica

Práctica
¿Cuál es la función de array_column() en PHP?
¿Cuál es la función de array_column() en PHP?
Was this page helpful?