循环

时间:2015-06-19 22:42:46

标签: php recursion

我试图在控制器中创建html而不是js。 有一个数组深度未知的数组。

$tree = $repo->childrenHierarchy();

和一个函数,它读取数组并返回一个带有数组元素值的html字符串。

 public function recursive($tree) {
        $html = "";
        foreach ($tree as $t) {
            $html = $html . '<li> <span><i class="fa fa-lg fa-minus-circle"></i>' . $t['title'] . '</span>';
            if ($t['__children'] != null) {
                $html = $html . '<ul>';
                $this->recursive($t['__children']);
                $html = $html . '</ul>';
            } else {
                $html = $html . '</li>';
            }
            return $html;
        }

我的问题是我无法保存总字符串,因为每次函数调用自身时,var html都会被初始化,需要保持字符串类似全局,但不知道如何。

2 个答案:

答案 0 :(得分:2)

在仔细研究这个之后,我认为在递归调用中初始化$html看起来真的很像问题。在我看来,它实际上应该从孩子们开始是空的。但是看起来你并没有将孩子们附加到你已经去过的$html字符串上。我认为你需要

$this->recursive($t['__children']);

取而代之的是

$html .= $this->recursive($t['__children']);

答案 1 :(得分:0)

在行动中将该值存储在类属性中不应该有什么问题吗?

public $html = "";

 public function recursive($tree) {
        foreach ($tree as $t) {
            $this->html = $this->html . '<li> <span><i class="fa fa-lg fa-minus-circle"></i>' . $t['title'] . '</span>';
            if ($t['__children'] != null) {
                $this->html = $this->html . '<ul>';
                $this->recursive($t['__children']);
                $this->html = $this->html . '</ul>';
            } else {
                $this->html = $this->html . '</li>';
            }
            return $this->html;
        }