Php 试图从这个混乱的StdClass中提取数据
我尝试使用PHP curl连接Coinmarketcap的API,从中取出实时比特币价格作为一种实践。关键是它给出的输出太令人困惑了,我不知道该如何从中扣除“价格”。周围也有一些类似的问题,但不幸的是,这些回答对我没有帮助。所以我想知道,如何从API给出的回报中扣除比特币的价格?似乎我误解了数组和对象,因为我还是个新手。 这就是“模具和转储”返回的结果:Php 试图从这个混乱的StdClass中提取数据,php,arrays,laravel,object,curl,Php,Arrays,Laravel,Object,Curl,我尝试使用PHP curl连接Coinmarketcap的API,从中取出实时比特币价格作为一种实践。关键是它给出的输出太令人困惑了,我不知道该如何从中扣除“价格”。周围也有一些类似的问题,但不幸的是,这些回答对我没有帮助。所以我想知道,如何从API给出的回报中扣除比特币的价格?似乎我误解了数组和对象,因为我还是个新手。 这就是“模具和转储”返回的结果: #data: array:1 [▼ "response" => """ { "status"
#data: array:1 [▼
"response" => """
{
"status": {
"timestamp": "2019-04-15T14:03:35.573Z",
"error_code": 0,
"error_message": null,
"elapsed": 5,
"credit_count": 1
},
"data": [
{
"id": 1,
"name": "Bitcoin",
"symbol": "BTC",
"slug": "bitcoin",
"circulating_supply": 17646787,
"total_supply": 17646787,
"max_supply": 21000000,
"date_added": "2013-04-28T00:00:00.000Z",
"num_market_pairs": 7253,
"tags": [
"mineable"
],
"platform": null,
"cmc_rank": 1,
"last_updated": "2019-04-15T14:02:29.000Z",
"quote": {
"USD": {
"price": 5166.87433557,
"volume_24h": 11238888046.6075,
"percent_change_1h": 0.0140845,
"percent_change_24h": 1.39641,
"percent_change_7d": -0.981349,
"market_cap": 91178730855.57031,
"last_updated": "2019-04-15T14:02:29.000Z"
}
}
}
]
}
"""
]
以下是从API请求的代码:
function apiGet($url)
{
$parameters = [
'start' => '1',
'limit' => '3',
];
$query = http_build_query($parameters);
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "$url",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_TIMEOUT => 30000,
CURLOPT_POST => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Accept-Encoding: deflate, gzip',
'X-CMC_PRO_API_KEY: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
),
)
);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
print_r(json_decode($response));
}
return view('price', compact('response'));
}
$parameters = [
'start' => '1',
'limit' => '1',
];
$query = http_build_query($parameters);
$btc = new \App\Http\Controllers\CoinsController();
$result = $btc->apiGet('https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest'."?".$query);
dd($result);
这是一个包含json字符串的嵌套键值数组。您可以获得如下价格:
$price=json\u decode($result['response'])->数据[0]->报价->美元->价格;
也是为了您的知识。您可以使用Laravel提供的Arr::get()
helper。见:
您是否尝试访问响应?您能否发布获取数据的代码。@thisiskelvin post updated。@SinaR您收到了什么错误刚刚更新了我的答案,我没有注意到三重引号。您可以使用
json_decode([…],true)保留数组结构
@namelivia非常感谢,我尝试了不同的方法,但由于它让人困惑,我无法得到有效的结果。算了。@thisiskelvin我想我没有正确使用它。这是我第一次处理这种嵌套返回。谢谢,这似乎是一种更好、更有效的方法。我一定会查的。
use \Illuminate\Support\Arr;
...
$data = json_decode($result['response'], true);
$price = Arr::get($data, 'data.0.quote.USD.price');