2

需要创建一个列表,其中包含存储在特定键 (product_id) 的数组行中的所有值。目前,对我的 $bestsellers 变量执行 print_r 会产生以下数组:

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

...根本没有产生任何结果。希望有人可以帮助我了解我哪里出错了。谢谢!

4

2 回答 2

1

stdClass Object嵌套值是对象,而不是数组(您在输出中看不到吗?)。array_column用于二维数组。您需要使用对象语法访问属性。

$ids = array_map(function($x) { return $x->product_id; }, $bestsellers);
于 2017-11-14T20:16:52.573 回答
1

为了将来参考,array_column将在 PHP 7 中为此工作,因此您必须使用 PHP 5。

对于 PHP 7,您的代码

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

会做你想做的事。

在 3v4l.org 上查看这里的区别。

于 2017-11-14T21:01:18.853 回答