2011-06-20 61 views
0

好了,現在它的怪異,但是當我打印數組中的test1的功能,其打印出所有的陣列,但是當它顯示它從TEST2其作用只顯示最後一個記錄誰能告訴我在哪裏,我錯了?PHP陣列中的另一個功能

class template{ 
    private $block = array(); 
    private $page; 

    public function test1($data){ 
     foreach($data as $k => $v){ 
      $this->block[$k] = $v; 
     } 
     print_r ($this->block); 
    } 

    public function test2(){ 
     print_r ($this->block); 
    } 
} 

$template = new template(); 

while($row1 = mysql_fetch_assoc($bbcat)){ 
    $template->test1(array("TIT" => $row1['title'])); 
    while($row2 = mysql_fetch_assoc($bbscat)){ 
     $template->test1(array("FTIT" => $row2['title'])); 

    } 
} 
+0

你不需要創建自己的模板。目前已經完成 – dynamic

+2

你不是叫'測試2()萬噸'任何地方...... –

回答

3

這是因爲foreach循環正在循環並設置$this->block。所以一旦完成,最後一次迭代$this->block現在被設置爲最後一個循環中的數據。

澄清

每個循環中,我們在foreach循環中做的是設置$this->block一些新的數據。一旦循環的最後一次迭代完成,我們將得到最終循環中輸出的數據。

這是否更有意義?

+0

'+ 1'但措辭可能需要固定BC我花了一點點把它 – Neal

+0

英語不是我的強項! – dotty

+0

無論如何要改善它嗎? –

0

的原因,你只能看到最後一個記錄是因爲您覆蓋了所有以前的記錄,因爲你這樣做你while -loop:

$template->test1(array("TIT" => $row1['title'])); 

內。然後test1()你做一個相當奇怪的說法:

public function test1($data){ 
    foreach($data as $k => $v){ 
     $this->block[$k] = $v; 
    } 
    print_r ($this->block); 
} 

你做foreach($data as $k => $v),這是不neccesary,因爲僅存在一個陣列(一個密鑰值對)的值。儘管如此,您ass $this->block[$k] = $v;$k是相同的每次TITFTIT),所以您每次撥打test1()覆蓋所有以前的設置值。

如果你再調用test2(),它沒有「設置」功能,而是隻顯示$this->block,你只能得到TITFTIT的最後一個值。