2013-05-09 61 views
0

例如,我有這樣的代碼,我做foreach循環,它工作正常PHP的foreach一個和很多因素

foreach ($response['albums']['album'] as $key=>$album) { 
    echo($album['artist']['name']); 
} 

$響應的內容是

[albums] => Array 
    (
     [album] => Array 
      (
       [0] => Array 
        (
         [name] => Recovery 
         [playcount] => 1176206 
        ) 

       [1] => Array 
        (
         [name] => The Eminem Show 
         [playcount] => 948632 
        ) 

      ) 
    ) 

但,當$響應的來源只包含一個元素,我有這樣的代碼,並且foreach循環將不起作用。

[albums] => Array 
    (
     [album] => Array 
      (
       [name] => Doo-Wops & Hooligans 
       [playcount] => 1106732 

      ) 
    ) 

所以問題是如何讓它在最小的變化下工作。請原諒我的初學者英語。

+0

它看起來像問題是,在前者的情況下,它會專輯 - > 0 - >的名字,但在第二種情況下它會專輯 - >名稱跳過0. – Patashu 2013-05-09 05:42:09

+0

不應該'作爲$專輯'足夠?這是一個不關聯的常規數組。 – elclanrs 2013-05-09 05:42:16

回答

1

嘗試這樣的..

if(array_key_exists(0,$response['albums']['album'])) 
{ 
     foreach ($response['albums']['album'] as $key=>$album) { 
     echo($album['artist']['name']); 
    } 
} 
else 
{ 
     foreach ($response['albums']['album'] as $album) { 
     echo $album['name']; 
    } 
} 
1
foreach ($response['albums'] as $album) { 

    if(isset(album['name'])) 
    { 
     echo $album['artist']['name']; 
    } 
    else 
    { 
     foreach($album as $val) 
     { 
      echo $val['artist']['name']; 
     { 
    } 
} 

,將工作,但理想的排列應該是這樣的:

[albums] => Array 
(
    [0] => Array 
     (
      [name] => Recovery 
      [playcount] => 1176206 
     ) 

    [1] => Array 
    (
     [name] => The Eminem Show 
     [playcount] => 948632 
    ) 

) 

這樣,即使仍然有一個你可以的foreach它。

1

最好是保持輸入數組$ response的一致結構來使用單個循環,否則你可以嘗試下面的代碼。

if(count($response['albums']) == 1){ 
foreach($response['albums'] as $key =>$val) { 

     echo $val['album']['name']; 
    } 
} 
else { 
foreach ($response['albums']['album'] as $key=>$album) { 
    echo($album['artist']['name']); 
} 
}