【发布时间】:2015-05-12 14:00:15
【问题描述】:
我正在向 shopify API 发出 GET 请求,它以 json 形式返回响应。 然后我使用 pHp 获取响应并将其转换为放入 csv 文件的数组。但我有一个错误。
php代码:
<?php
$baseUrl = 'https://myapikey@mysite.myshopify.com/admin/';
$response = json_decode(file_get_contents($baseUrl.'orders.json?limit=250'));
$fp = fopen('file.csv', 'w');
var_dump($response->orders[0]->line_items[0]->properties);
foreach ($response->orders as $order_index => $order) {
foreach ($order->line_items as $item_index => $item) {
echo "order: {$order_index} item: {$item_index}";
var_dump($item->properties);
fputcsv($fp, $item);
}
}
fclose($fp);
?>
Warning: fputcsv() expects parameter 2 to be array, object given in C:\wamp\www\test\index.php on line 57
第 57 行是: fputcsv($fp, $item);
你能帮我把它变成一个数组并插入到csv中吗?
@Squeegy,感谢您的回答。到目前为止它正在工作,唯一的问题是在 csv 中它缺少一些重要的值。 在回声中,它们表现得很好,这里是第一个循环的一部分:
order: 0 item: 0
array (size=9)
0 =>
object(stdClass)[6]
public 'name' => string 'Glove Size' (length=10)
public 'value' => string 'L' (length=1)
1 =>
object(stdClass)[7]
public 'name' => string 'Hat Size' (length=8)
public 'value' => string 'S/M' (length=3)
2 =>
object(stdClass)[8]
public 'name' => string 'Pant Size' (length=9)
public 'value' => string '32x34' (length=5)
3 =>
object(stdClass)[9]
public 'name' => string 'Right or Left Handed?' (length=21)
public 'value' => string 'Right' (length=5)
4 =>
object(stdClass)[10]
public 'name' => string 'Shirt Size' (length=10)
public 'value' => string 'S' (length=1)
5 =>
object(stdClass)[11]
public 'name' => string 'Shoe Size' (length=9)
public 'value' => string '10.5' (length=4)
6 =>
object(stdClass)[12]
public 'name' => string 'shipping_interval_frequency' (length=27)
public 'value' => string '1' (length=1)
7 =>
object(stdClass)[13]
public 'name' => string 'shipping_interval_unit_type' (length=27)
public 'value' => string 'Months' (length=6)
8 =>
object(stdClass)[14]
public 'name' => string 'subscription_id' (length=15)
public 'value' => string '1522' (length=4)
但在 csv 中,我上面写的值都不包括在内。知道为什么吗?
【问题讨论】:
-
这就是你做
(array) $item时的样子吗?如果是这种情况,您还需要在循环中更深一层。因为你现在有一个数组,但是每个键的值仍然是一个对象。除非该对象具有__toString()函数,否则它只会导致 NULL。所以这可能就是您的 CSV 仍然为空的原因。 -
csv 不为空,但没有回显值
-
它在 csv 文件中,类似于:手动、1046740548、455951420、1、1、1、运动风格自动更新(每 1 个月发货)、1292559264、运动风格自动更新(每 1 发货月), 数组, 1, 1, 0, 数组
-
GET 请求后的 shopify API 在 json 中返回带有许多值的长响应,但是在我最终转储大部分响应之后,我得到了我在问题中写的第一个循环的回声.我只希望回声响应在 csv 中。 var_dump($item->properties); //这是转储所有不必要数据的部分-
-
是的,这听起来很对。
fputcsv()不能递归工作。所以任何不是字符串的数组值,它只是转换为字符串(string) $value并将其作为结果。您需要做一些进一步的工作,将结构组织成您想要的东西,因为最终每次调用fputcsv()时,您都需要传递一个简单的数组,如array('1234', 'foo', 'bar'),仅此而已。在不知道您的 JSON 的确切结构的情况下,我只能建议您退后一步并计划一下您要寻找的最终结果是什么。