php array in another function


php array in another function

现在很奇怪,但当我在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都是相同的TITFTIT),因此每次调用test1()时都会覆盖以前的所有设置值。

如果随后调用test2(),它没有"设置"功能,而只显示$this->block,则只能获得TITFTIT的最后一个值。