2009-08-19 90 views
0
我有一些問題 foreach statement.Though輸入到 foreach聲明

是一個數組,它說陣列的foreach問題

Invalid argument supplied for foreach() 

和我的代碼看起來像這樣

foreach($res_array as $res) 
    { 
     foreach($res as $re) 
     { 
      echo $re['shortUrl']; 
     } 
    } 

和我的數組看起來像這樣

Array ([errorCode] => 0 [errorMessage] => [results] => Array ([http://www.telegraph.co.uk/earth/earthpicturegalleries/5966251/The-weirdest-animals-on-Planet-Earth.html?image=5] => Array ([hash] => 2qNNV6 [shortUrl] => http://su.pr/2qNNV6)) [statusCode] => OK) 

我得到那個錯誤爲第二個foreach。請幫我解決這個問題。

+0

更多信息請問什麼語言/平臺/等? – 2009-08-19 15:39:16

+0

其在PHP ..... – Sakura 2009-08-19 16:06:18

回答

1

我想你要循環$res_array['results'],而不是$res_array。你不應該需要嵌套你的foreach循環。

它看起來像數組包含一些附加信息,所以你可能要像做(未經測試):

$res_array = GetResultsFromSomewhere(); 

if ($res_array['errorCode']) { 
    die("Error {$res_array['errorCode']}: {$res_array['errorMessage']}"); 
} 

foreach ($res_array['results'] as $url => $item) { 
    echo $item['shortUrl']; 
} 
+0

感謝ü如此多的烏拉圭回合幫助 – Sakura 2009-08-19 16:08:15

5

因爲不是原始數組的每個元素本身都是一個數組。例如,你有errorCode這是一個整數,從而引發錯誤。

+0

感謝烏拉圭回合的幫助 – Sakura 2009-08-19 16:15:10

0

在您的示例頂部陣列的每個值也是一個數組。從你的例子看來,這似乎不正確。在執行第二個foreach循環之前,您需要check whether element is an array

+0

感謝ü如此多的烏拉圭回合幫助 – Sakura 2009-08-19 16:09:10

0

您有一個數組並非其所有元素都是數組,所以你必須先首先檢查每個元素是否爲數組,然後獲取它。

<?php 
foreach($res_array as $res) 
    { 
     if(is_array($res)) 
     foreach($res as $re) 
     { 
      echo $re['shortUrl']; 
     } 
    } 
?>