现在很奇怪,但当我在test1函数中打印数组时,它会打印所有数组,但当它从test2函数中显示时,它只显示最后的记录,有人能告诉我哪里错了吗?
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']));
}
}
这是因为foreach循环正在循环并设置$this->block
。因此,一旦完成,最后一次迭代$this->block
现在被设置为最后一个循环中的数据。
澄清
我们在foreach循环中所做的每个循环都将$this->block
设置为一些新数据。一旦循环的最后一次迭代完成,我们就会得到在最后一次循环中输出的数据。
这样更有意义吗?
您只看到最后一条记录的原因是因为您覆盖了以前的所有记录,就像您在while
-循环中这样做:
$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)
,这不是必需的,因为数组中只有一个值(一个键值对)。尽管如此,每次调用$this->block[$k] = $v;
和$k
都是相同的(TIT
和FTIT
),因此每次调用test1()
时都会覆盖以前的所有设置值。
如果随后调用test2()
,它没有"设置"功能,而只显示$this->block
,则只能获得TIT
和FTIT
的最后一个值。