Возвращает массив из значений одного столбца входного массива

# array_column

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

array_column — Возвращает массив из значений одного столбца входного массива

### Описание

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

Функция array_column() возвращает значения из одного столбца массива `array`, который идентифицируется ключом `column_key`. Необязательный параметр `index_key` индексирует значения выходного массива значениями столбца `index_key` входного массива.

### Список параметров

`array`

  Многомерный массив или массив объектов, из которого вытягивается столбец значений. При передаче массива объектов функция вытянет из объектов только общедоступные свойства. Для вытягивания защищённых или закрытых свойств потребуется реализовать в классе оба магических метода — __get() и __isset().

`column_key`

  Столбец, значения которого требуется вернуть. В аргументе передают либо целочисленный ключ столбца, значения которого требуется получить, либо название строкового ключа ассоциативного массива или свойства объекта. В параметр передают значение `null`, чтобы вернуть массивы или объекты целиком, что полезно при одновременной передаче аргумента `index_key` для переиндексации выходного массива.

`index_key`

  Столбец, значения которого станут ключами или индексами возвращаемого массива. В аргументе передают либо целочисленный ключ столбца, либо название строкового ключа. Значение приводится стандартным для ключей массива способом, а до PHP 8.0.0 также разрешались объекты, которые поддерживают преобразование в строку.

### Возвращаемые значения

Функция возвращает массив значений, которые представляют один столбец из входного массива.

### Список изменений

Версия | Описание
--- | ---
8.0.0 | Функция больше не приводит к строке объекты в столбцах, которые обозначили аргументом `index_key`, а вместо этого выбрасывает ошибку TypeError.

### Примеры

Пример #1 Пример получения столбца с именами из набора записей

    <?php

    // Массив с набором записей, похожих на те, которые возвращает база данных
    $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);

    ?>

Результат выполнения приведённого примера:

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

Пример #2 Пример получения столбца с фамилиями из набора записей и индексации фамилий значениями столбца "id"

    <?php

    // Возьмём массив $records из первого примера
    $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);

    ?>

Результат выполнения приведённого примера:

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

Пример #3 Пример получения столбца с именами пользователей из открытого свойства объекта "username"

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

    ?>

Результат выполнения приведённого примера:

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

Пример #4 Пример получения столбца с именами из закрытого свойства объекта "name" путём определения магических методов __isset() и __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'));

    ?>

Результат выполнения приведённого примера:

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

Функция вернёт пустой массив, если класс объекта не содержит определения магического метода __isset().
`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open