【问题标题】:How do I loop through multidimensional JSON array in PHP?如何在 PHP 中循环遍历多维 JSON 数组?
【发布时间】:2020-12-17 14:34:08
【问题描述】:

我想编写代码来循环遍历多维数组(4 或 5 深)并回显找到的所有键和值并跳过空数组。

$drugs = fopen("http://dgidb.org/api/v2/interactions.json?drugs=FICLATUZUMAB", "r");
$json_drugs = stream_get_contents($drugs);
fclose($drugs);
$data_drugs = json_decode($json_drugs,true);

foreach ($data_drugs as $key => $value) 
...

任何人,任何人,费里斯?

【问题讨论】:

  • 使用递归函数。
  • 回显数组中的所有内容?嗯...print_r($data_drugs); 试试这个。你不需要foreach,把print_r放在json_decode之后
  • print_r($data_drugs);不,我想触摸每个数组元素 - 如果我能做到,那么我可以对数组内容做任何事情,例如添加格式、逻辑等。

标签: php json parsing


【解决方案1】:

在 json_decode 是关联数组之后,您的 $data_drugs 不再是 json。
您不需要任何循环来查看键和值

$data_drugs = json_decode($json_drugs,true);
print_r($data_drugs);

/* or if you don't like inline */

echo'<pre>';
print_r($data_drugs);
echo'</pre>';

您可以使用 var_dump($data_drugs) - 带有类型的键和值,可能您不需要这个
但是如果你想更多地显示键和值...喜欢使用递归函数

function show($x){
    foreach($x as $key=>$val){
        echo"<p>$key : ";
        if(is_array($val)){ echo". . ."; show($val);}
        else{ echo"$val</p>";}}}

show($data_drugs);

【讨论】:

  • 我喜欢,很优雅。这就是所谓的递归函数吗(正如上面@Barmar 所建议的那样),即它调用自己?
  • @barnyard 我的函数 show() 不是......好吧,它是一个懒惰的版本,需要更多的时间才能获得真正优雅的显示:) 是的,它是递归的 - 自我调用。在 php 中调用一个函数,你必须输入它的名字(带有必要的参数)——就像最后一行。第 4 行中的 show() 有一个条件 - 如果处理的值是一个数组 - 然后 - 自调用:“为这个特定值做我”,这没什么特别的,方法之一。是的,正确使用是优雅的
  • 它在一个简短的可重用函数中触及每个元素(键和值)而无需硬编码索引名称(如我自己的尝试) - 我认为它很优雅,因为它非常简单,输出格式是装饰。谢谢@black blue
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 2011-01-02
  • 2016-02-16
  • 2021-09-17
  • 1970-01-01
相关资源
最近更新 更多