2011-07-20 69 views
2
$foo = ''; 

foreach((array)$foo as $f){ 
    echo 'xxx'; 
} 

仍將輸出「XXX」 ......處理空數組用foreach

+0

你試過'$富=陣列();'代替一個空字符串? – thwd

+1

因爲(數組)$ foo創建一個空字符串項的數組 - $ foo = array(「」) – yoavmatchulsky

回答

-3

鑄造一個空字符串數組不會導致一個空數組。這將創建一個數組與空字符串作爲一個項目:

array(
    0 => '' 
) 

你可以檢查它是否是一個有效的數組:

if(is_array($foo)) 
{ 
    foreach($foo as $f) 
    { 
     echo 'xxx'; 
    } 
} 
+0

不,你不需要,鑄就夠了! – feeela

+0

米赫蘭的答案表明這還不夠! – binarious

+0

你必須看到另一個答案......唯一需要檢查的可能是空虛檢查,但不檢查它是否是數組。查看@Subdigger的(正確)答案。 – feeela

10

(array)$foo

這不是空數組,但數組其中包含一個空元素。

+0

正確:'array(1){ [0] => string(0)「」 }' – karim79

+1

擊敗我吧! +1。 – Shef

3

是,它會輸出「XXX」,因爲轉換爲陣列字符串變量$foo = ''將變爲:

array(
    0 => '' 
) 
1
if(!empty($foo)) 
    foreach((array)$foo as $f) 
    { 
     echo 'xxx'; 
    } 
+0

$ foo ='我是一個字符串';這裏會成爲問題。 – binarious

+0

@Martin比德我不認爲。因爲(數組)$ foo。並且因爲我不是我的代碼。我不在乎是否有人不檢查他的數組是否是數組。問題是_仍然輸出'xxx'..._並且給定的代碼解決了這個問題 – Subdigger

+0

$ var =(array)'string';會返回一個數組'字符串'的元素。在那個特定的選段中,你是對的,但是我會在循環之前檢查它是否是一個數組。 – binarious

1

我總是檢查類型和內容之前,我執行一個foreach。例如。

if(is_array($foo) && sizeof($foo) <> 0) 
{ 
// do foreach 
} 
2

首先,您不是通過類型鑄造下面的語句創建一個空數組。下面的代碼實際上會在第一個元素中生成一個空字符串的數組。

$foo = ''; 
(array)$foo; 

所以,正確的方法,創建一個空數組是

$foo = array(); 
foreach($foo as $f){ 
    echo 'xxx'; 
} 

希望,這可以幫助你......