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
Version
Description
8.0.0
Objects in columns indicated by index_key parameter
will no longer be cast to string and will now throw a TypeError instead.
7.1.0
Property visibility is now respected. Formerly, protected and private
properties were read directly.
7.0.0
The rows of array may now be objects as well as
arrays.
Examples
Example #1 Get the column of first names from a recordset
<?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:
Array
(
[0] => John
[1] => Sally
[2] => Jane
[3] => Peter
)
Example #2
Get the column of last names from a recordset, indexed by the "id" column
Array
(
[2135] => Doe
[3245] => Smith
[5342] => Jones
[5623] => Doe
)
Example #3
Get the column of usernames from the public "username" property of an
object
<?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:
Array
(
[0] => user 1
[1] => user 2
[2] => user 3
)
Example #4
Get the column of names from the private "name" property of an object
using the magic methods __isset() and __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'));
?>
The above example will output:
Array
(
[0] => Fred
[1] => Jane
[2] => John
)
If __isset() is not provided, the object
contributes no entry to the returned array.