2017-06-13 169 views
1

我知道在Stackoverflow上有類似的問題,但我沒有找到任何幫助解決我遇到的問題。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 

回答

3

出於某種原因,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

1

由於$ 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"; 
       } 
      } 
} 
1

輸出與預期不符,因爲您錯過了內循環。下面的代碼可以正常工作。

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>"; 
     } 
    }  

}