Собрать все значения из строки вложенного массива определенного ключа

Необходимо создать список, состоящий из всех значений, хранящихся в строке массива определенного ключа (product_id). В настоящее время выполнение print_r моей переменной $ bestsellers создает следующий массив:

Array
(
[0] => stdClass Object
(
[product_id] => 178
[order_item_qty] => 9
)

[1] => stdClass Object
(
[product_id] => 233
[order_item_qty] => 4
)

[2] => stdClass Object
(
[product_id] => 179
[order_item_qty] => 1
)
)

Другие SO ответы заставили меня попробовать:

$ids = array_column($bestsellers, 'product_id');

…но это произвело пустой массив, я полагаю, потому что строка, которую я пытаюсь получить, вложена туда? Имея это в виду, я пытался

foreach($bestsellers as $bestseller) {
$ids = array_column($bestsellers, 'product_id');
}

…который не дал результата вообще.
Надеюсь, кто-нибудь может подсказать мне, где я ошибаюсь. Спасибо!

2

Решение

Вложенные значения являются объектами, а не массивами (разве вы не видите stdClass Object в выходной?). array_column для 2-мерных массивов. Вам нужно получить доступ к свойствам, используя синтаксис объекта.

$ids = array_map(function($x) { return $x->product_id; }, $bestsellers);
1

Другие решения

Для дальнейшего использования array_column будет работать для этого в PHP 7, так что вы должны использовать PHP 5.

Для PHP 7 ваш код

$ids = array_column($bestsellers, 'product_id');

будет делать то, что вы хотите.

Смотрите разницу здесь на 3v4l.org.

1

По вопросам рекламы [email protected]