2011-06-04 152 views
6

在這個article,它提到:如何避免輸出foreach錯誤?

的foreach不支持使用抑制錯誤信息的能力 '@'。

如何避免輸出foreach錯誤?我不希望看到:

警告:提供的foreach無效參數()

有沒有一種方法,使一個if else判斷?

+4

很簡單。只是不要向'foreach'提供無效的參數。避免錯誤,而不是壓制它們。你的代碼根本不應該包含任何'@'* *。 – Tomalak 2011-06-04 23:04:22

回答

5

的foreach檢查之前,如果變量包含數組:

if (is_array($var)) 
{ 
    foreach... 
} 
+0

你不需要測試數組是否爲空,如果是的話不會有任何錯誤。 – 2011-06-04 23:20:36

+0

@Matthieu,試試吧。 – 2011-06-04 23:40:23

+1

好的foreach在一個空的數組上不會引發錯誤。我瘋了嗎 ? '$ var = array(); ($ var爲$ elem)echo'A';'不會引發任何錯誤。 – 2011-06-04 23:50:54

5

前綴與(陣列)的變量是這樣的。

foreach((array) $array_thats_not_an_array as $key => $value){ 
    echo $key . ' ' . $value; 
} 
+1

我發現它更明確有一個「if」塊。 – 2011-06-04 23:12:05

+0

如果'$ array_thats_not_an_array'將包含Object,你的代碼會做什麼?資源?如果'$ array_thats_not_an_array'包含錯誤的類型會怎麼樣?因爲算法編碼時有錯誤?錯誤將被靜音,並且將更難以找到。 – 2011-06-05 06:47:37

+1

你絕對正確,我不會在這種情況下使用它。但他不想看到一個錯誤。 「我不希望看到警告:爲foreach()提供了無效參數」;) – 2011-06-13 17:29:40

0
if(!empty($array)) { 
    foreach($array as $a) { 
    // do something 
    } 
} 
+0

你應該確認它是一個數組。如果它是空的,不會有任何錯誤,所以你不需要測試它。 – 2011-06-04 23:14:21

+0

@Matthieu:是不是完全避免了海報所要求的錯誤? – Tom 2011-06-04 23:16:05

+0

是的,這是我的觀點,檢查數組是否爲空是無用的,因爲即使沒有你的測試,也不會有錯誤 – 2011-06-04 23:32:00