API卷曲响应问题(php)

时间:2020-08-11 13:40:12

标签: php api associative-array

我无法处理Companies House API的回复。我正在从php页面发出以下curl请求:

$request_url_1 ='https://api.companieshouse.gov.uk/company/' ;
$company_number = 11495745;
$request_url_2 = '/officers';
$request_url = $request_url_1 . $company_number . $request_url_2;   
  $ch = curl_init($request_url); 
  $headers = array(
    'Content-Type: application/json',
    'Authorization: Basic '. base64_encode("$chkey:")
);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  $content = curl_exec($ch); 
  curl_close( $ch ); 
  $contents = json_decode($content,true); 

以下是发送curl请求后在php页面上“粘贴”的响应,我似乎无法获得应包含curl响应的$ contents变量的内容/值。

 {
   "active_count":1,
   "items_per_page":35,
   "kind":"officer-list",
   "etag":"6cc48213158205c9fa85492a4c2ef0a98b56b2f1",
   "resigned_count":2,
   "items":[
      {
         "date_of_birth":{
            "year":1963,
            "month":2
         },
         "appointed_on":"2019-08-01",
         "nationality":"British",
         "address":{
            "address_line_1":"Moorside Crescent",
            "country":"United Kingdom",
            "address_line_2":"Sinfin",
            "postal_code":"DE24 9PH",
            "locality":"Derby",
            "premises":"75"
         },
         "occupation":"Company Director",
         "links":{
            "officer":{
               "appointments":"/officers/IryiaaBZodlGNaOP0Rf3Pb2GnO8/appointments"
            }
         },
         "name":"MILLER, Eira",
         "country_of_residence":"England",
         "officer_role":"director"
      },
      {
         "date_of_birth":{
            "month":3,
            "year":1987
         },
         "nationality":"English",
         "occupation":"Company Director",
         "address":{
            "locality":"Derby",
            "address_line_1":"Moorside Crescent",
            "premises":"75",
            "country":"United Kingdom",
            "postal_code":"DE24 9PH",
            "address_line_2":"Sinfin"
         },
         "appointed_on":"2018-12-10",
         "resigned_on":"2019-07-31",
         "name":"KING, Kimberley Rachel",
         "links":{
            "officer":{
               "appointments":"/officers/av7G3-iF_9-FXhRH2xm-IxejeGQ/appointments"
            }
         },
         "country_of_residence":"United Kingdom",
         "officer_role":"director"
      },
      {
         "address":{
            "postal_code":"DE24 9PH",
            "locality":"Derby",
            "country":"United Kingdom",
            "premises":"75",
            "address_line_2":"Sinfin",
            "address_line_1":"Moorside Crescent"
         },
         "occupation":"Managing Director",
         "nationality":"British",
         "appointed_on":"2018-08-01",
         "resigned_on":"2018-12-10",
         "officer_role":"director",
         "country_of_residence":"United Kingdom",
         "links":{
            "officer":{
               "appointments":"/officers/X9nlVD6qIIENMjaH946__4CB3QE/appointments"
            }
         },
         "name":"MARTIN, Katey",
         "date_of_birth":{
            "month":6,
            "year":1968
         }
      }
   ],
   "links":{
      "self":"/company/11495745/officers"
   },
   "inactive_count":0,
   "start_index":0,
   "total_results":3
}

我尝试将结果作为非关联数组返回并通过普通数组访问它,但那里也没有乐趣。

FluffyKitten提供了以下代码来执行名称字段的提取:

$item = $contents["items"];
foreach($item as $items){
    echo $items["name"];
}   

但是,这无法访问所需的数据。 $ contents的print_r结果为'1',并且var_dump(1)

1 个答案:

答案 0 :(得分:1)

您的代码有几个问题:

  1. 您正在混淆用于访问数组和对象的代码
  2. 在不需要循环的情况下循环播放

您正在使用json_decode($content,true),并通过传递该true参数将结果转换为关联数组,但随后尝试将items作为对象的属性进行访问

由于已将内容转换为关联数组,因此可以使用正确的键轻松访问所需的信息,例如:

$item = $contents["items"];
foreach($item as $items){
    echo "<p>".$items["name"];
}    

参考 PHP json_decode Documentation

更新

您的问题已经完全改变-它是关于如何遍历变量与结果的关系,但是现在看来,问题首先是将结果另存为变量。

您需要将CURLOPT_RETURNTRANSFER option设置为true,以免直接输出结果(我想这就是您将结果“粘贴”到PHP页面中的意思)。

将此代码添加到您的CURL代码中,然后如果其余代码正确无误,则应将结果保存在$content变量中,以便您可以使用它循环遍历上面的代码:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);