首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用curl PHP获取API

使用curl PHP获取API
EN

Stack Overflow用户
提问于 2020-08-04 23:35:41
回答 3查看 68关注 0票数 2

我想从https://www.travel-advisory.info/api获取API,然后我已经写好了代码。

代码语言:javascript
复制
  $curl = new CurlService();
  $response = $curl->to('https://www.travel-advisory.info/api')->get();
  throw_if(!$response, Exception::class, 'Terjadi kesalahan: Data tidak dapat diperoleh');      
  $data = json_decode($response);
  echo $data->data;

这是来自API的示例响应

代码语言:javascript
复制
  "data": {
    "AD": {
      "iso_alpha2": "AD",
      "name": "Andorra",
      "continent": "EU",
      "advisory": {
        "score": 2.79999999999999982236431605997495353221893310546875,
        "sources_active": 4,
        "message": "",
        "updated": "2020-08-04 07:21:19",
        "source": "https://www.travel-advisory.info/andorra"
      }
    },
    "AE": {
      "iso_alpha2": "AE",
      "name": "United Arab Emirates",
      "continent": "AS",
      "advisory": {
        "score": 3.100000000000000088817841970012523233890533447265625,
        "sources_active": 7,
        "message": "",
        "updated": "2020-08-04 07:21:19",
        "source": "https://www.travel-advisory.info/united-arab-emirates"
      }
    },
    "AF": {
      "iso_alpha2": "AF",
      "name": "Afghanistan",
      "continent": "AS",
      "advisory": {
        "score": 5,
        "sources_active": 10,
        "message": "",
        "updated": "2020-08-04 07:21:19",
        "source": "https://www.travel-advisory.info/afghanistan"
      }
    },
    "AG": {
      "iso_alpha2": "AG",
      "name": "Antigua and Barbuda",
      "continent": "NA",
      "advisory": {
        "score": 3,
        "sources_active": 3,
        "message": "",
        "updated": "2020-08-04 07:21:19",
        "source": "https://www.travel-advisory.info/antigua-and-barbuda"
      }
    },
    "AI": {
      "iso_alpha2": "AI",
      "name": "Anguilla",
      "continent": "NA",
      "advisory": {
        "score": 3,
        "sources_active": 3,
        "message": "",
        "updated": "2020-08-04 07:21:19",
        "source": "https://www.travel-advisory.info/anguilla"
      }
    }
  }

我的问题是如何过滤continent : "AS"?P

EN

回答 3

Stack Overflow用户

发布于 2020-08-05 00:05:06

代码语言:javascript
复制
$data = json_decode($response, true)['data'];
print_r($this->continentFilter($data, 'AS'));

函数将如下所示:

代码语言:javascript
复制
private function continentFilter(array $data, string $continent): array
{
    $filteredArray = [];
    foreach ($data as $item) {
        if ($item['continent'] === $continent) {
            $filteredArray = $item;

            break;
        }
    }

    return $filteredArray;
}
票数 1
EN

Stack Overflow用户

发布于 2020-08-05 00:02:23

如果大陆值与"AS“匹配,您可以遍历每个对象并推送到一个新数组。

使用$key => $value可以保留索引。

示例:

代码语言:javascript
复制
$filtered = [];
foreach ( $data->data as $key => $value )
{
    if ( $value->continent === "AS" )
    {
        $filtered[$key] = $value;
    }
}

print_r($filtered);

将为您提供:

代码语言:javascript
复制
[AE] => stdClass Object
    (
        [iso_alpha2] => AE
        [name] => United Arab Emirates
        [continent] => AS
        [advisory] => stdClass Object
            (
                [score] => 3.1
                [sources_active] => 7
                [message] => 
                [updated] => 2020-08-04 07:21:19
                [source] => https://www.travel-advisory.info/united-arab-emirates
            )

    )

[AF] => stdClass Object
    (
        [iso_alpha2] => AF
        [name] => Afghanistan
        [continent] => AS
        [advisory] => stdClass Object
            (
                [score] => 5
                [sources_active] => 10
                [message] => 
                [updated] => 2020-08-04 07:21:19
                [source] => https://www.travel-advisory.info/afghanistan
            )

    )
    ...
票数 0
EN

Stack Overflow用户

发布于 2020-08-05 00:05:00

您可以使用带有数组标志和array_filter方法的json_decode,如下所示:

代码语言:javascript
复制
$data = (json_decode($response, true))['data'];

$as = array_filter($data, function($item) {
    return $item['continent'] === 'AS';
});

还请注意,上面给出的json需要用大括号括起来,如下所示:

代码语言:javascript
复制
{
  "data": {
  ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63250278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档