PHP foreach, key(), pointer

各位,小弟有個PHP array foreach loop的問題
  1. $arr = array('one','two','three','four','five',);
複製代碼
小弟想把上述的Array 用foreach loop出來,
成為string "one, two, three, four, five;"

從php.net的manual上看到有人提議用key($arr)去判定是否到了end of array,小弟以此實作:
  1. $arr = array('one','two','three','four','five',);

  2. $str = '';
  3. foreach ($arr as $k => $v)
  4. {
  5.    
  6.     $str .= $v;
  7.     if ( key($arr) === NULL)
  8.     {
  9.         $str .= ';';
  10.     }
  11.     else
  12.     {
  13.         $str .= ',';
  14.     }
  15. }

  16. echo $str;
複製代碼
發現echo出來的是"one,two,three,four,five,"

如果我在loop的最尾,強制array pointer 向前行,則可達成我的要求
  1. next($arr);
複製代碼
如果在foreach loop內 var_dump( key($arr) );
會顯示(int) 1, (int) 1,(int) 1,(int) 1,(int) 1

加了next($arr)後,
var_dump( key($arr) ) 會顯示(int) 1, (int) 2, (int) 3, (int) 4, NULL

我的問題是:foreach的pointer 沒有向前移動?它的運作方式跟key(), next()的pointer不同?

[ 本帖最後由 kau 於 2009-8-29 17:27 編輯 ]

loop完后加多兩句都可以
if($str)
        $str = substr($str, 0, -1) + ';';

TOP

  1. join(', ', $arr).';'
複製代碼
這樣不可以嗎?
為什麼在foreach裏面check $arr的key....?foreach不是把$arr 的 key & val 拿出用嗎?為什麼$arr會有改變?

[ 本帖最後由 hdvd-rom 於 2009-8-29 20:30 編輯 ]

TOP

用implode唔得咩

TOP

$str = implode(",", $arr);
$str .= ";";

TOP

不要reinvent 車輪
可以用implode, explode,好好用

[ 本帖最後由 梁炳 於 2009-8-29 21:45 編輯 ]

TOP

樓上咁多位有冇睇清楚問題?

原帖由 kau 於 2009-8-29 17:17 發表
我的問題是:foreach的pointer 沒有向前移動?它的運作方式跟key(), next()的pointer不同?


PHP: foreach - Manual

當中有段 Note:
Note: Unless the array is referenced, foreach operates on a copy of the specified array and not the array itself. foreach  has some side effects on the array pointer. Don't rely on the array pointer during or after the foreach without resetting it


所以運作方式的確不同

建議睇晒全部, 唔明就睇埋下面堆 comment.

TOP

原帖由 carychow 於 2009-8-29 20:53 發表
PHP: foreach - Manual

啊,原來已有解說,謝謝你,增長知識!

原帖由 hdvd-rom 於 2009-8-29 20:21 發表
join(', ', $arr).';'這樣不可以嗎?
為什麼在foreach裏面check $arr的key....?foreach不是把$arr 的 key & val 拿出用嗎?為什麼$arr會有改變?

原帖由 殛克 於 2009-8-29 20:35 發表
$str = implode(",", $arr);
$str .= ";";


謝謝解答!因為array中的key 和value 都要loop出來做幾樣野,諗住用string concatenation慳番一個array function use,雖然唔知implode點運作,自己覺得佢都係loop一次
不過唔知咁做是否正確?

[ 本帖最後由 kau 於 2009-8-29 22:30 編輯 ]

TOP

原帖由 carychow 於 2009-8-29 20:53 發表
樓上咁多位有冇睇清楚問題?



PHP: foreach - Manual

當中有段 Note:


所以運作方式的確不同

建議睇晒全部, 唔明就睇埋下面堆 comment.


應該話你有無睇清楚我寫乜?如果我唔知,我點會咁反問........
答個句code係希望佢唔好簡單問題複雜化,

TOP

原帖由 hdvd-rom 於 2009-8-29 23:04 發表


應該話你有無睇清楚我寫乜?如果我唔知,我點會咁反問........
答個句code係希望佢唔好簡單問題複雜化,

我又冇指明「咁多位」係邊幾位
你寫乜我好清楚, 但咁同其他回覆有咩分別? 根本唔會知 PHP 中 foreach 點運作.

foreach不是把$arr 的 key & val 拿出用嗎?為什麼$arr會有改變?

單憑呢句. 你認為反問一個唔明 foreach o既人會明點解 foreach 係 copy 出黎用?
點解唔搵下個有說服力o既 reference 補充說明?
定係應該加句叫樓主去 Google 搜尋? 係都提示下用咩 keyword, 好心o既咪貼埋URL.

TOP