在foreach中递归地取消设置变量

时间:2013-08-02 18:02:50

标签: php recursion unset

我需要通过递归构建树层次结构。 所有工作正常没有php未设置,但我想要已经构建的未设置元素。

问题:在下面的代码中取消设置工作,但是中断第一次递归调用,所以从示例数据类别中id = 5不能渲染。

任何想法,非常有趣的是什么错误

 function renderMenu(&$tempTree, $parentId){
        foreach($tempTree as $row) {
            if ($row['parent_id'] == $parentId) {
                $id = $row["category_id"];
                echo $row['name'].'<br>';
                unset($tempTree[$id]);
               if (isset($row['has_child'])){
                   renderMenu($tempTree, $id);
                }

            }
        }
    }

$s=array ( '1' => Array ( 'category_id' => 1,
'parent_id' => 0,
'name' => '1' ),

'2' => Array ( 'category_id' => 2,
'parent_id' => 0,
'has_child' => true,
'name' => '2'),

'3' => Array ( 'category_id' => 3,
'parent_id' => 2,
'name' => '3'),

'4' => Array ( 'category_id' => 4,
'parent_id' => 2,
'name' => '4'),

'5' => Array ( 'category_id' => 5,
'parent_id' => 0,
'name' => '5' )
);



renderMenu($s,0);

1 个答案:

答案 0 :(得分:1)

错误在于:

 unset($tempTree[$id]);

应该是:

 unset($row[$id]);

(在foreach循环中将$ tempTree元素引用为$ row)