API卷曲响应问题php

问题描述

我无法处理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","address":{
            "locality":"Derby","address_line_1":"Moorside Crescent","premises":"75","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",{
         "address":{
            "postal_code":"DE24 9PH","address_line_1":"Moorside Crescent"
         },"occupation":"Managing Director","appointed_on":"2018-08-01","resigned_on":"2018-12-10","officer_role":"director","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. 您正在混淆用于访问数组和对象的代码
  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);