Как получить свойство объекта из каждого объекта в массиве?

Предполагая, что у меня есть массив объектов в PHP, что-то вроде:

Array ( [0] => stdClass Object ( [id] => 1 [name] => Title One ) [1] => stdClass Object ( [id] => 2 [name] => Title Two ) [2] => stdClass Object ( [id] => 7 [name] => Title Seven ) ) 

Каков наилучший способ (т.е. самый быстрый) получить массив идентификаторов? т.е. array(1,2,7) я могу array(1,2,7) вручную, но я считаю, что должен быть лучший метод.

Просто видел это в подобных вопросах, но есть небольшая дискуссия о том, является ли принятый ответ действительно лучшим способом, плюс это от 2 лет назад. Я на PHP 5.3.

Самый быстрый путь – это просто цикл ( foreach , for , while ). Использование функций обратного вызова будет нести лишние накладные расходы.

Я бы посмотрел, есть ли способ создать список через код, который создает исходный массив объектов.

Вы можете использовать array_map для получения идентификаторов от каждого элемента.

 function getID($a){ return $a->id; } $IDs = array_map('getID', $array); 

Демо: http://ideone.com/nf3ug

Начиная с PHP 7.0 вы можете использовать встроенную функцию array_column для этого, которая принимает входной массив и имя свойства, которое вы хотите вырвать:

 $ids = array_column($input, 'id'); // array(0 => 1, 1 => 2, 2 => 7) 

В качестве третьего параметра вы также можете указать индексный ключ:

 $ids = array_column($input, 'name', 'id'); // array(1 => 'Title One', 2 => 'Title Two', 7 => 'Title Seven') 

Обратите внимание, что, хотя он уже доступен в PHP 5.5.0, поддержка массива объектов была впервые введена в PHP 7.0.

Вы можете сделать это легко с uuzo goodies

 $result = array_map(Functions::extract()->id, $objects); 

или с массивами (из узе-лайтов)

 $result = Arrays::map($objects, Functions::extract()->id); 

Выезд: http://ouzo.readthedocs.org/ru/latest/utils/functions.html#extract

См. Также функциональное программирование с ouzo (я не могу опубликовать ссылку).

Вы пытались использовать функцию array_keys ?

РЕДАКТИРОВАТЬ:

 <?php $ids = array(); for($c=0; $c<count($the_array); $c++) $ids[$c] = $the_array[$c]->id; ?> 

Вы также можете использовать extract_property (), который является хорошо протестированной библиотекой, специально разработанной для этой работы (отказ от ответственности: я автор).

Я использую RedBean и почему-то переход в «getID» не работал для меня, так вот как я это сделал:

 $ids = array_map(function($val){return $val->id;}, $objects);