2013-05-31 27 views
2

只有一個AHA!瞬間加上;後出現意外循環。有趣的是,這並沒有引發錯誤,而是跳過(?)循環數組中的所有內容,並觸及最後一個元素。foreach語句後的分號有「有趣」的結果。爲什麼?

測試代碼:

$test_array = array(
    'a' => 'one', 
    'b' => 'two', 
    'c' => 'three' 
); 
foreach ($test_array as $key => $val); 
    echo $val; 

問題:爲什麼會出現這種情況?

+1

分號正在終止該功能。它看起來像你只是說'foreach'停止'echo $ val' – ntgCleaner

+3

我相信你在說「循環所有的值,但不做任何事情,然後迴應出最後一個$ val項」。 –

回答

4

分號結束的語句和foreach語句是類似的功能 - 它開闢了一個範圍。如果你不打開了花括號多行範圍,範圍內運行到下一個分號,所以

foreach ($test_array as $key => $val); 

foreach ($test_array as $key => $val) { } 

我相信這回答了你的問題,爲什麼等價它的行爲如此。

4

當你這樣做:

foreach ($test_array as $key => $val); 

這裏所有的foreach執行(由每個元素傳遞),但因爲你的推杆一個;存在的,沒有其他的指令冤大頭,而不是當它結束全部迭代,$val包含最後一個元素,這你碰巧在你的下一個指令呼應的價值:

echo $val; 
1

;結束循環,這樣就相當於

foreach ($test_array as $key => $val){ /* do nothing */ } 

在循環$ val的結束有最後一個鍵的值,因此它呼應它

1

這是標準的「功能「的C語言的所有語言。也就是說,

for (...); 

意味着

for (...) { } 

而且,在你的情況下,後foreach循環結束,$val不會消失,但仍然存在並保持最後的值就被分配到。

1

循環運行,執行迭代和條件檢查,但沒有別的。然後執行echo命令,此時$val包含它分配的最後一個值。並且分配的最後一個值是循環的最後一個值。

0

你所做的只是循環到除了最後一個元素之外的任何事情。

相關問題