Упоминание об этой функции промелькнуло на Хабре прошлым летом, но тогда она имела статус proposed, теперь же она, определенно, войдет в PHP 5.5.
Как работает array_column
Формат вызова:
(array) array_column(array $input, mixed $columnKey[, mixed $indexKey]);
Здесь $input — исходный [N>1]-мерный массив, из которого производится выборка, а $columnKey — индекс столбца, по которому она делается. Если будет указан параметр $indexKey, результат будет дополнительно проиндексирован по указанному в нем столбцу.
Пример №1
Допустим, у нас есть массив:
<?php $records = array( array( 'id' => 2135, 'first_name' => 'John', 'last_name' => 'Doe' ), array( 'id' => 3245, 'first_name' => 'Sally', 'last_name' => 'Smith' ), array( 'id' => 5342, 'first_name' => 'Jane', 'last_name' => 'Jones' ), array( 'id' => 5623, 'first_name' => 'Peter', 'last_name' => 'Doe' ) ); $firstNames = array_column($records, 'first_name'); print_r($firstNames);
Получим выборку по столбцу first_name:
Array ( [0] => John [1] => Sally [2] => Jane [3] => Peter )
Пример №2
Теперь дополнительно проиндексируем тот же массив по столбцу id:
<?php $lastNames = array_column($records, 'last_name', 'id'); print_r($lastNames);
Получаем массив вида id => last_name:
Array ( [2135] => Doe [3245] => Smith [5342] => Jones [5623] => Doe )
Но что если «строки» не всегда имеют один и тот же набор ключей?
<?php $mismatchedColumns = array( array( 'a' => 'foo', 'b' => 'bar', 'e' => 'baz' ), array( 'a' => 'qux', 'c' => 'quux', 'd' => 'corge' ), array( 'a' => 'grault', 'b' => 'garply', 'e' => 'waldo' ), );
Здесь во всех строках есть ключ "a", но ключ "b" есть только в двух из них. В этом случае все элементы columnKey будут возвращены, а если в соответствующей строчке отсутствует ключ indexKey, они будут пронумерованы целыми числами, начиная с нуля. Примерно так же, как если бы при объявлении массивы мы случайно забыли указать индекс.
<?php $foo = array_column($mismatchedColumns, 'a', 'b'); $bar = array('bar' => 'foo', 'qux', 'garply' => 'grault'); /* $foo и $bar содержат примерно следующее: Array ( [bar] => foo [0] => qux [garply] => grault ) */
Если же вы захотите сделать выборку по ключу "b", то получите массив с двумя элементами, так как только две строки содержат этот индекс.
В случае, если более чем одна строка содержит одно и то же значение indexKey, новое значение перезапишет то, которое встретилось ранее.
// Массив $records из примера №1 $firstNames = array_column($records, 'first_name', 'last_name'); print_r($firstNames); /* Array ( [Doe] => Peter [Smith] => Sally [Jones] => Jane ) */
ссылка на оригинал статьи http://habrahabr.ru/post/173943/
Добавить комментарий