【问题标题】:Trying to take data out of this confusing StdClass [duplicate]试图从这个令人困惑的 StdClass 中取出数据 [重复]
【发布时间】:2019-09-05 13:45:29
【问题描述】:

我尝试使用 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);

【问题讨论】:

  • 您是否尝试访问响应?
  • 能否贴出获取数据的代码。
  • @thisiskelvin 帖子已更新。
  • @SinaR 你收到什么错误

标签: php arrays laravel object curl


【解决方案1】:

这是一个包含 json 字符串的嵌套键值数组。你可以得到这样的价格:

$price = json_decode($result['response'])->data[0]->quote->USD->price;

【讨论】:

  • 刚刚更新我的答案,我没有注意到三引号。
  • 你可以使用json_decode([...], true);保留你的数组结构
  • @namelivia 非常感谢,我尝试了不同的方法,但由于令人困惑,我无法获得有效的结果。解决了。​​
  • @thisiskelvin 我想我没有正确使用它。这是我第一次处理这样的嵌套返回。
【解决方案2】:

也供您参考。你可以使用 Laravel 提供的 Arr::get() 助手。见docs

use \Illuminate\Support\Arr;

...

$data = json_decode($result['response'], true);

$price = Arr::get($data, 'data.0.quote.USD.price');

【讨论】:

  • 谢谢,这似乎是一种更好、更有效的方法。我一定会检查的。
猜你喜欢
  • 2014-05-24
  • 2013-03-07
  • 2016-03-16
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多