php8.5
Home/ Manual/ array / functions/ array_column

array_column

PHP function Edit on GitHub ✎

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

Return the values from a single column in the input array

Description

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

array_column() returns the values from a single column of the array, identified by the column_key. Optionally, an index_key may be provided to index the values in the returned array by the values from the index_key column of the input array.

array is treated as a list of rows, each of which is itself an array or an object; a column is the entry or property that column_key names in every row. Rows that are neither an array nor an object, and rows in which that entry or property is absent, are skipped without a diagnostic. The keys of array are never preserved.

Parameters

array

A list whose rows are arrays or objects, from which a column of values is pulled. If a row is an object, public properties are read directly. For a property that is not publicly accessible to be read, the class must implement both the __get() and __isset() magic methods: without __isset() the row is skipped, and with __isset() but no __get() an Error is thrown.

column_key

The column of values to return. This value may be an integer key of the column to retrieve, or it may be a string key name for an associative array or property name. It may also be null to return complete rows (this is useful together with index_key to reindex the array).

index_key

The column to use as the index/keys for the returned array. This value may be the integer key of the column, or it may be the string key name. The value is cast as usual for array keys (however, prior to PHP 8.0.0, objects supporting conversion to string were also allowed).

Return Values

Returns an array of values representing a single column from the input array. If column_key is null, the rows themselves are returned.

Changelog

VersionDescription
8.0.0Objects in columns indicated by index_key parameter will no longer be cast to string and will now throw a TypeError instead.
7.1.0Property visibility is now respected. Formerly, protected and private properties were read directly.
7.0.0The rows of array may now be objects as well as arrays.

Examples

Get the column of first names from a recordset

php
<?php

// Array representing a possible record set returned from a database
$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);

?>

The above example will output:

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

Get the column of last names from a recordset, indexed by the "id" column

php
<?php

// Using the $records array from Example #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);

?>

The above example will output:

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

Get the column of usernames from the public "username" property of an object

php
<?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'));

?>

The above example will output:

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

Get the column of names from the private "name" property of an object using the magic methods __isset() and __get()

php
<?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'));
?>

The above example will output:

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

If __isset() is not provided, the object contributes no entry to the returned array.

Source: reference/array/functions/array-column.xml · from the official PHP manual (php/doc-en)