Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.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从API响应访问值时遇到问题_Php - Fatal编程技术网

使用PHP从API响应访问值时遇到问题

使用PHP从API响应访问值时遇到问题,php,Php,我正在使用PHP 我正在尝试从API回显信息,该API有如下响应: {"id":1111, "library":[{"id":222,"name":"Test"},{"id":444, "name":"Test4"}], "advertiser":{"id":333,"name"

我正在使用PHP

我正在尝试从API回显信息,该API有如下响应:

{"id":1111, "library":[{"id":222,"name":"Test"},{"id":444, "name":"Test4"}], "advertiser":{"id":333,"name":"Test2"}}
我将其存储在$api\u response\u数组中

要获取“id”值(1111),我使用:

要获取库ID值,我使用:

foreach($api_response_array['library'] as $key=>$value {
    echo $value['id'];
}
但是,我不确定从响应的广告客户部分获取id值的语法是否正确。我注意到它是用大括号括起来的,而不是方括号,这说明它不是数组。但当我尝试将其作为对象引用时,会出现一个错误:

Code: $api_response_array['advertiser']->id
Error: Trying to get property 'id' of non-object

有人能帮我用正确的语法来访问这个值吗?谢谢

如果你转储你的数组,那么你会发现“库”和“广告商”是不同的

以下是阵列的工作方式:

array(3) {
  ["id"]=>
  int(1111)
  ["library"]=>
  array(2) {
    [0]=>
    array(2) {
      ["id"]=>
      int(222)
      ["name"]=>
      string(4) "Test"
    }
    [1]=>
    array(2) {
      ["id"]=>
      int(444)
      ["name"]=>
      string(5) "Test4"
    }
  }
  ["advertiser"]=>
  array(2) {
    ["id"]=>
    int(333)
    ["name"]=>
    string(5) "Test2"
  }
}
要使其工作,请尝试以下操作:

$response = '{"id":1111, "library":[{"id":222,"name":"Test"},{"id":444, "name":"Test4"}], "advertiser":{"id":333,"name":"Test2"}}';
$array = json_decode($response, 1);

// Dump all to see what you have and how to process it like:
var_dump($array);


// Then you can get each value like:

echo $array['id'];
echo $array['library'][0]['id'];
echo $array['library'][0]['name'];
echo $array['library'][1]['id'];
echo $array['library'][1]['name'];

echo $array['advertiser']['id'];
echo $array['advertiser']['name'];

您是否使用第二个参数对json进行了解码?也许可以尝试
$api\u response\u array['advertiser']['id']
。是的,很抱歉,json响应存储在$api\u response\u json中,然后我使用json解码($api\u response\u json,true)并将此信息存储在$api\u response\u array中。您提供的语法非常有效!我可以得到id值。我没意识到它如此简单,只需敲打两个方括号值。谢谢你的帮助!请随意提交我可以接受的答案。第二个参数为true,只将整个JSON字符串解码为数组,而不必费心将JSON对象转换为基本的PHP stdClass对象。这意味着您只需像访问任何其他PHP数组一样访问它们。
$response = '{"id":1111, "library":[{"id":222,"name":"Test"},{"id":444, "name":"Test4"}], "advertiser":{"id":333,"name":"Test2"}}';
$array = json_decode($response, 1);

// Dump all to see what you have and how to process it like:
var_dump($array);


// Then you can get each value like:

echo $array['id'];
echo $array['library'][0]['id'];
echo $array['library'][0]['name'];
echo $array['library'][1]['id'];
echo $array['library'][1]['name'];

echo $array['advertiser']['id'];
echo $array['advertiser']['name'];