2011-07-07 19 views
0

我有一個非常令人沮喪的問題,我不能導致。它只是沒有加起來。PHP的陣列()W /的foreach如果僅使用環。=構建結果

我傳遞一個數組上的foreach()處理,像這樣:

if (is_array($seminar)) { 
foreach ($seminar as $sem_id) 
    $sem_id_list .= "$sem_id"; 
    echo "$sem_id<br />"; 
} 

正如你可以看到我的陣列()是$研討會,並輸出看起來像這樣:

Array 
(
    [0] => 3 
    [1] => 8 
    [2] => 9 
    [3] => 13 
    [4] => 14 
    [5] => 15 
) 

正如你可以在我的代碼中看到,我建立一個塊W/=。 like:* $ sem_id_list。=「$ sem_id」; *和回顯出來的樣子如:389131415如預期。

但是,當我只是試圖迭代和打印每個值,如:* echo「$ sem_id
」; *我只得到最後一個數組()項!

我從來沒有遇到過這個問題。我猜我在這裏錯過了一些簡單的事情,但從我所有的經驗來看,這應該是可行的,並且打印這些結果就好了。

作爲一個側面說明,後續代碼var_dump($研討會);產生這種太:

array(6) { [0]=> string(1) "3" [1]=> string(1) "8" [2]=> string(1) "9" [3]=> string(2) "13" [4]=> string(2) "14" [5]=> string(2) "15" } 

回答

5

你錯過了foreach的左括號和右括號。嘗試:

if (is_array($seminar)) { 
    foreach ($seminar as $sem_id) { 
    $sem_id_list .= "$sem_id"; 
    echo "$sem_id<br />"; 
    } 
} 

或建立列表,並在最後打印:

if (is_array($seminar)) { 
    foreach ($seminar as $sem_id) { 
    $sem_id_list .= "$sem_id"; 
    } 
    echo "$sem_id_list"; 
} 
+3

如果OP已經正確縮進他的代碼,這將是非常明顯的。 –

+0

是的,就是這樣。我不敢相信我錯過了!我猜想一組新的眼睛可以看到更多。 – OldWest

+2

請注意,OP的代碼在技術上仍然有效,這不是他想要做的。新行+縮進是一種避免括號或冒號的方法,但是隻有下一行會在塊中執行,這就是爲什麼第二行只打印最後一個項目的原因,因爲$ sem_id成爲一個全局變量,僅由最後一次迭代。另一個答案試圖解釋這一點。 –

2

你缺少{}爲你的迴路校驗

if (is_array($seminar)) { 
foreach ($seminar as $sem_id){ 
    $sem_id_list .= "$sem_id"; 
    echo "$sem_id<br />"; 
} 
} 

http://codepad.org/0UZpQOZx

如果您不要給{}在循環中只有一條語句,即

$sem_id_list .= "$sem_id"; 

和行echo "$sem_id<br />";只會在完成循環後執行一次。