来自API调用的PHP对象数组

时间:2016-12-21 16:31:23

标签: php arrays api stdclass

我已经进行了API调用$client->orders->get(),我得到的回复数据格式如下:

Array ( [0] => stdClass Object ( [id] => 5180 [order_number] => 5180 [created_at] => 2016-12-21T14:50:08Z [updated_at] => 2016-12-21T15:01:51Z [completed_at] => 2016-12-21T15:01:52Z [status] => completed [currency] => GBP [total] => 29.00 [subtotal] => 29.00 [total_line_items_quantity] => 1 [total_tax] => 0.00 [total_shipping] => 0.00 [cart_tax] => 0.00 [shipping_tax] => 0.00 [total_discount]...........

所以我遍历数据:

foreach ( $client->orders->get() as $order ) {

// skip guest orders (e.g. orders with customer ID = 0)
print_r($order);
    echo $order[0];
    echo $order->subtotal;
}

麻烦我输出数据,如果我使用print_r函数,我得到一个输出,但我不知道如何访问数组的各个元素。

如果我尝试:

echo $order[0].[id];

我明白了:

捕获致命错误:类stdClass的对象无法转换为字符串。

我已经搜索了这个,但我找不到任何我理解的东西。请帮助...... :)

2 个答案:

答案 0 :(得分:0)

以下循环中的 $order

foreach ( $client->orders->get() as $order ) { .. }

是属于此 $client->orders->get() 数组的每个元素,它们采用对象的形式。

因此输出(例如 subtotal 条目)你做 echo $order->subtotal

foreach ( $client->orders->get() as $order ) { $order->subtotal }
  • echo $order[0]循环中)无效,因为这样做会将$order视为数组,同时其类型为 object 。而是$order->somefields来引用其属性。
  • print_r($order)循环中)有效,因为您可以使用 print_r 来打印对象的属性。
  • $client->orders->get()[0]->subtotal(如果将放在循环之外)也有效。

以防数组的元素包含 object array

的形式
$myarray = $client->orders->get();
  • // True because the first element is object echo (is_object($myarray[0])) ? 'True':'False';

  • // False because the first element is object, not an array echo is_array($myarray[0]) ? 'True':'False';

为此

// the same with echo is_array($client->orders->get()) ? 'True':'False';
echo is_array($myarray) ? 'True':'False';
确定这是真的,。

答案 1 :(得分:0)

您可以在不使用foreach循环的情况下访问小计列值。这是代码。

$response = $client->orders->get();
$subtotal = $response[0]->subtotal;

如果您想使用foreach,那么您可以像这样访问。

foreach ( $client->orders->get() as $order ) {
 echo $order->order_number;
}