array_column
PHP Manual
PHP Manual»Funciones de Arrays»array_column

array_column

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

array_column — Devuelve los valores de una columna de un array de entrada

Descripción

function array_column(array $array, int|string|null $column_key, int|string|null $index_key = null): array

array_column() devuelve los valores de una columna de array, identificada por la clave column_key. Opcionalmente, se puede proporcionar un argumento index_key para indexar los valores en el array devuelto por los valores de la columna index_key del array de entrada.

array se trata como una lista de filas, cada una de las cuales es a su vez un array o un objeto; una columna es la entrada o propiedad que column_key nombra en cada fila. Las filas que no son ni un array ni un objeto, y las filas en las que dicha entrada o propiedad está ausente, se omiten sin diagnóstico. Las claves de array nunca se conservan.

Parámetros

array

Una lista cuyas filas son arrays u objetos, a partir de la cual se extrae una columna de valores. Si una fila es un objeto, las propiedades públicas se leen directamente. Para que una propiedad no accesible públicamente sea leída, la clase debe implementar tanto los métodos mágicos __get() como __isset(): sin __isset() la fila se omite, y con __isset() pero sin __get() se lanza un Error.

column_key

La columna de valores a devolver. Este valor puede ser la clave entera de la columna a recuperar, o bien el nombre de la clave para un array asociativo o el nombre de la propiedad. También puede valer null para devolver las filas completas (esto puede ser útil en conjunción con el argumento index_key para reindexar el array).

index_key

La columna a utilizar como índice/clave para el array devuelto. Este valor puede ser la clave entera de la columna, o el nombre de la clave. El valor es cast como de costumbre para las claves del array (sin embargo, anterior a PHP 8.0.0, los objetos que soportan una conversión en string también eran permitidos).

Valores devueltos

Devuelve un array de valores que representan una sola columna desde el array de entrada. Si column_key es null, se devuelven las propias filas.

Historial de cambios

Versión Descripción
8.0.0 Los objetos en las columnas indicadas por el argumento index_key ya no se convertirán en string y lanzarán ahora una TypeError en su lugar.
7.1.0 Ahora se respeta la visibilidad de las propiedades. Anteriormente, las propiedades protegidas y privadas se leían directamente.
7.0.0 Las filas de array ahora también pueden ser objetos, además de arrays.

Ejemplos

Ejemplo #1 Recupera la columna de los nombres

<?php

// Array que representa un conjunto de registros de una base de datos
$records = [
    [
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ],
    [
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ],
    [
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
    ],
    [
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    ]
];

$first_names = array_column($records, 'first_name');
print_r($first_names);

?>

El ejemplo anterior mostrará:

Array
(
    [0] => John
    [1] => Sally
    [2] => Jane
    [3] => Peter
)

Ejemplo #2 Recupera la columna de los apellidos, indexada por la columna "id"

<?php

// Utilizando el array del ejemplo #1
$records = [
    [
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ],
    [
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ],
    [
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
    ],
    [
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    ]
];

$last_names = array_column($records, 'last_name', 'id');
print_r($last_names);

?>

El ejemplo anterior mostrará:

Array
(
    [2135] => Doe
    [3245] => Smith
    [5342] => Jones
    [5623] => Doe
)

Ejemplo #3 Recupera la columna de los nombres de usuario desde la propiedad pública "username" de un objeto

<?php

class User
{
    public $username;

    public function __construct(string $username)
    {
        $this->username = $username;
    }
}

$users = [
    new User('user 1'),
    new User('user 2'),
    new User('user 3'),
];

print_r(array_column($users, 'username'));

?>

El ejemplo anterior mostrará:

Array
(
    [0] => user 1
    [1] => user 2
    [2] => user 3
)

Ejemplo #4 Recupera la columna de nombres desde la propiedad privada "name" de un objeto utilizando los métodos mágicos __isset() y __get()

<?php

class Person
{
    private $name;

    public function __construct(string $name)
    {
        $this->name = $name;
    }

    public function __get($prop)
    {
        return $this->$prop;
    }

    public function __isset($prop) : bool
    {
        return isset($this->$prop);
    }
}

$people = [
    new Person('Fred'),
    new Person('Jane'),
    new Person('John'),
];

print_r(array_column($people, 'name'));
?>

El ejemplo anterior mostrará:

Array
(
    [0] => Fred
    [1] => Jane
    [2] => John
)
Si __isset() no está definido, el objeto no contribuye con ninguna entrada al array devuelto.

To Top