Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 试图从这个混乱的StdClass中提取数据_Php_Arrays_Laravel_Object_Curl - Fatal编程技术网

Php 试图从这个混乱的StdClass中提取数据

Php 试图从这个混乱的StdClass中提取数据,php,arrays,laravel,object,curl,Php,Arrays,Laravel,Object,Curl,我尝试使用PHP curl连接Coinmarketcap的API,从中取出实时比特币价格作为一种实践。关键是它给出的输出太令人困惑了,我不知道该如何从中扣除“价格”。周围也有一些类似的问题,但不幸的是,这些回答对我没有帮助。所以我想知道,如何从API给出的回报中扣除比特币的价格?似乎我误解了数组和对象,因为我还是个新手。 这就是“模具和转储”返回的结果: #data: array:1 [▼ "response" => """ { "status"

我尝试使用PHP curl连接Coinmarketcap的API,从中取出实时比特币价格作为一种实践。关键是它给出的输出太令人困惑了,我不知道该如何从中扣除“价格”。周围也有一些类似的问题,但不幸的是,这些回答对我没有帮助。所以我想知道,如何从API给出的回报中扣除比特币的价格?似乎我误解了数组和对象,因为我还是个新手。 这就是“模具和转储”返回的结果:

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