array_column

(PHP 5 >= 5.5.0, PHP 7)

array_columnDevuelve los valores de una sola columna del array de entrada

Descripción

array_column ( array $input , mixed $column_key [, mixed $index_key = NULL ] ) : array

array_column() devuelve los valores de una sola columna de input, identificado por la clave de columna column_key. Opcionalmente, se podría proporcionar una clave de índice, index_key, para indexar los valores del array devuelto por los valores de la columna index_key del array de entrada.

Parámetros

input

Un array multidimensional o un array de objetos desde el que extraer una columna de valores. Si se proporciona un array de objetos, entonces se podrá extraer directamente las propiedades públicas. Para poder extraer las proiedades protegidas o privadas, la clase debe implementar los métodos mágicos __get() y __isset().

column_key

La columna de valores a devolver. Este valor podría ser una clave de tipo integer de la columna de la cual obtener los datos, o podría ser una clave de tipo string para un array asociativo o nombre de propiedad. También prodría ser NULL para devolver array completos u objetos (útil junto con index_key para reindexar el array).

index_key

La columna a usar como los índices/claves para el array devuelto. Este valor podría ser la clave de tipo integer de la columna, o podría ser el nombre de la clave de tipo string. El valor es cast como es habitual para las claves de array (Sin embargo, también se permiten los objetos que soportan la conversión a string).

Valores devueltos

Devuelve un array de valores que representa una sola columna del array de entrada.

Historial de cambios

Versión Descripción
7.0.0 Se añadió la capacidad de que el parámetro input sea un array de objetos.

Ejemplos

Ejemplo #1 Obtener la columna de nombres del conjunto de resultados

<?php
// Array representando un conjunto de registros posibles devueltos desde una base de datos
$registros = array(
    array(
        
'id' => 2135,
        
'nombre' => 'John',
        
'apellido' => 'Doe',
    ),
    array(
        
'id' => 3245,
        
'nombre' => 'Sally',
        
'apellido' => 'Smith',
    ),
    array(
        
'id' => 5342,
        
'nombre' => 'Jane',
        
'apellido' => 'Jones',
    ),
    array(
        
'id' => 5623,
        
'nombre' => 'Peter',
        
'apellido' => 'Doe',
    )
);
 
$nombres array_column($registros'nombre');
print_r($nombres);
?>

El resultado del ejemplo sería:

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

Ejemplo #2 Obtener la columna de apellidos del conjunto de resultados, indexada por la columna "id"

<?php
// Se emplea el array $registros del Ejemplo #1
$apellidos array_column($registros'apellido''id');
print_r($apellidos);
?>

El resultado del ejemplo sería:

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

Ejemplo #3 Obtener la columna de nombres de usuarios de la propiedad pública "nombre_usuario" de un objeto

<?php

class Usuario
{
    public 
$nombre_usuario;

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

$usuarios = [
    new 
Usuario('usuario 1'),
    new 
Usuario('usuario 2'),
    new 
Usuario('usuario 3'),
];

print_r(array_column($usuarios'nombre_usuario'));
?>

El resultado del ejemplo sería:

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

Ejemplo #4 Obtener la columna de nombres de la propiedad privada "nombre" de un objeto empleando el método mágico __get().

<?php

class Persona
{
    private 
$name;

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

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

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

$gente = [
    new 
Persona('Fred'),
    new 
Persona('Jane'),
    new 
Persona('John'),
];

print_r(array_column($gente'nombre'));
?>

El resultado del ejemplo sería:

Array
(
    [0] => Fred
    [1] => Jane
    [2] => John
)
Si no se proporciona __isset(), será devuelto un array vacío.