JSON解码嵌套数组PHP循环

问题描述:

我知道在*上有类似的问题,但我没有找到任何帮助解决我遇到的问题。JSON解码嵌套数组PHP循环

我有这样的JSON:

[{ 
"name": "Name0", 
"services": [ 
    [{ 
     "Service": "Service00", 
     "Description": "Desc00" 
    }, { 
     "Service": "Service01", 
     "Description": "Desc01" 
    }] 
] 
}, { 
"name": "Name1", 
"services": [ 
    [{ 
     "Service": "Service10", 
     "Description": "Desc10" 
    }] 
] 
}] 

我遍历它:

$quoteJson = json_decode($quoteJson); 

foreach($quoteJson as $mydata) { 
    echo $mydata->name . "<br>"; 
     foreach($mydata->services as $key => $value) 
      { 
       echo $value[$key]->Service . "<br>"; 
       echo $value[$key]->Description . "<br>"; 
      } 
} 

而结果我得到的是:

Name0 
Service00 
Desc00 

Name1 
Service10 
Desc10 

我通过我不能循环服务元素,得到:

Name0 
Service00 
Desc00 
Service01 
Desc01 

Name1 
Service10 
Desc10 

出于某种原因,services是一个数组中的数组。做了小改动你的代码:

foreach($quoteJson as $mydata) {                         
    echo $mydata->name . "<br>";                           
    foreach($mydata->services[0] as $key => $value)                      
    {                                  
     echo $value->Service . "<br>";                          
     echo $value->Description . "<br>";                        
    }                              
} 

而现在它返回:

NAME0
Service00
Desc00
Service01
Desc01
名1
Service10
Desc10

+0

工作就像一个魅力!谢谢!会做一些resaerch,因为我不明白为什么需要[0]索引。 – anexo

+0

当前您的'服务'对象包含一个嵌套数组。基本上:''服务“:[[]]'。您可以使用[0]访问“services”中的第一个元素,该元素包含您尝试访问的数据。 – Hollings

由于$ mydata-> services是多维数组,你需要循环$值变量。

$quoteJson = json_decode($quoteJson); 

foreach($quoteJson as $mydata) { 
    echo $mydata->name . "\n"; 

     foreach($mydata->services as $key => $value) 
      { 
       foreach($value as $k=>$v){ // loop the array 
        echo $v->Service . "\n"; 
        echo $v->Description . "\n"; 
       } 
      } 
} 

输出与预期不符,因为您错过了内循环。下面的代码可以正常工作。

foreach($quoteJson as $mydata) { 
echo $mydata->name . "<br>"; 
    foreach($mydata->services as $key => $value) 
    { 
     foreach($value as $innerdata){ 
      echo $innerdata->Service . "<br>"; 
      echo $innerdata->Description . "<br>"; 
     } 
    }  

}