В PHP 5.5 будет функция array_column

от автора

19-го марта было объявлено о «feature freeze» в ветке PHP 5.5, в преддверии выхода php-5.5.0beta1. В числе других, в эту версию включена новая функция для работы с массивами под названием array_column.

Упоминание об этой функции промелькнуло на Хабре прошлым летом, но тогда она имела статус 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *