PHP 用 while、list、each 達成 foreach 的寫法

學習程式語言時, 總是學學 for, 然後再試著用 while 寫出 for 的效果 等等的一些練習.

來看看沒有 foreach 前, 要想要有 foreach 的功能要怎麼寫(用 while、list、each 來達成).

在這篇文章看到: PHP的foreach前身寫法 (下述程式碼轉載自此文)


//舊的寫法
reset($attributes);
while (list($key, $value) = each($attributes)) {
    //do something
}

//PHP4版本新增
foreach ($attributes as $key => $value){
   //do something
}

紀錄起來, 若新學的程式語言沒有 foreach, 或許可以試著幫他補上~ 🙂

2010-01-06 更新: 於 while() 前面增加 reset($array), 感謝 Hackfan 指點. (foreach 預設會將陣列指標做 reset 的動作, 就是跑完一次 foreach, 指標已經指到最後面, while 再跑將印不出任何資料).


關於 Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
本篇發表於 Programming。將永久鏈結加入書籤。

PHP 用 while、list、each 達成 foreach 的寫法 有 11 則回應

  1. william 說道:

    這種寫法,一看就是 Perl 的風格呀... XD

  2. Tsung 說道:

    呵呵, 是阿, 但是很方便哩~
    對了, 直接點您的名稱, 您的網站的 ref table 似乎有問題.

  3. william 說道:

    是呀, 這個 ref_karma 的老問題已經很久了...
    有空時,應該整個改用 Akismet 好了...

  4. Tsung 說道:

    試試重建 wordpress.ref_karma 這個 table 看看?

  5. renn999 說道:

    老實說 有foreach的話要抓取array的數值都超方便的

  6. Tsung 說道:

    嗯嗯, 就是某些程式語言沒有提供 foreach.
    於是想想該如何幫他加上這個功能~ 😛

  7. renn999 說道:

    我想到就是說試試看mysql_fetch出來的東西能不能用foreach直接下去處理
    但是好像試失敗了 必須用while塞給一個變數之後才可以使用他去處理
    囧">

  8. Tsung 說道:

    Mmm... mysql_fetch 出來的已經是 array, 不需要經過 while 沒關係的~

  9. Hackfan 說道:

    while的写法,应该先reset吧
    foreach默认对数组进行reset操作的

  10. Tsung 說道:

    嗯嗯, 感恩, 這個我沒注意到.
    實測範例狀況:
    $a = array(...);
    foreach($a) 跑完後, 再跑上述的 while($a), 會印不出任何資料.
    foreach($a) 跑完後, 再跑 foreach($a), 會資料還是會印的出來.
    foreach($a) 跑完後, 再跑 reset($a), 再跑 while($a), 會資料就可以正常印的出來.

  11. dreamboycx 說道:

    还是foreach比较好用。。。。

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料