Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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中的嵌套数组中提取JSON数据?_Php_Api_Import - Fatal编程技术网

如何从PHP中的嵌套数组中提取JSON数据?

如何从PHP中的嵌套数组中提取JSON数据?,php,api,import,Php,Api,Import,因此,我从Coinmarketcap.com中提取API,新版本的数据结构完全不同 另外,我是PHP和api的新手,不知道如何从api调用中提取嵌套数组数据 以下是api数据: 或 我决定将对象拉入json\u dcode,然后每次循环创建一个新数组,直到我能够获取我想要的数组数据,在本例中是$a()。这是可行的,但我认为可能有更有效的方法,因为我认为for循环会导致性能问题。有更好的方法吗?先谢谢你-丹 这是我的测试代码,请告诉我更好的方法: <?php $BitcoinConten

因此,我从Coinmarketcap.com中提取API,新版本的数据结构完全不同

另外,我是PHP和api的新手,不知道如何从api调用中提取嵌套数组数据

以下是api数据: 或

我决定将对象拉入
json\u dcode
,然后每次循环创建一个新数组,直到我能够获取我想要的数组数据,在本例中是
$a()
。这是可行的,但我认为可能有更有效的方法,因为我认为for循环会导致性能问题。有更好的方法吗?先谢谢你-丹

这是我的测试代码,请告诉我更好的方法:

 <?php
$BitcoinContents = file_get_contents("https://api.coinmarketcap.com/v2/ticker/1/?structure=array");
$BTCContents = json_decode($BitcoinContents, true);
echo " 0 <br>";
print_r($BTCContents);
echo "<br>";

foreach($BTCContents as $array){
  echo "<br>--------<br>";
  print_r($array);
  foreach($array as $arr){
    echo "<br>--------<br>";
    print_r($arr);
    foreach($arr as $ar){
      echo "<br>--------<br>";
      print_r($ar);
      foreach($ar as $a){
        echo "<br>--------<br>";
        print_r($a);
        foreach($a as $key => $val){
          echo "<br>=========<br>";
          echo "$key: $val | ";
        }
      }
    }
  }
}


echo "<br>=========<br>"; 
echo "<br>--------<br>";
      print_r($a); 
echo "<br>--------<br>";
echo "<br>=========<br>"; 
echo "<br>".$a['price']."<br>";

echo "<br>--------<br>";
echo "<br>=========<br>"; 

如果您试图访问嵌套数组中的特定数组,只需执行以下操作:

$data = $BTCContents['data'][0]['quotes']['USD'];
在这里,我使用数组的索引来访问一个特定的数组,即USD。 数组索引=数组的名称,可以是单词或数字

然后,您可以执行foreach循环来访问其中的项,也可以通过执行以下操作直接访问它们:

$price = $data['price'];

为什么不使用数组索引,比如
$data['take']['from']['here']]
?嗯,我不知道怎么做。。。你能解释一下吗?(对PHP来说完全是新手)你的意思是“BTCContents['data']['quotes']['USD']['price']`而不是我的
$a['price']
”?是的,就是这样。只需在不同的索引处打印r,看看你到达了哪里。只有当你想检索特定索引中的所有条目时,才需要循环。太好了,这完全奏效了。我在这里试过了,非常感谢。试图勾选您的答案,但我的声誉分数不到15。附带问题,为什么我们必须在这里添加
[0]
?如果您打印($BTCContents),您将看到有不同的索引。这些索引用于访问特定数组。您可以在此处阅读不同类型的数组:[。当您进入$BTCContents['data']数组时,如果您打印($BTCContents['data']),则到达id、名称、引号和其他数据的新索引为0。有时索引为单词或数字。
$price = $data['price'];