PHP递归树视图生成器仅从填充的“视图”中选择一个选项;精选;阵列?

PHP递归树视图生成器仅从填充的“视图”中选择一个选项;精选;阵列?,php,recursion,Php,Recursion,我有一个主要工作的递归树视图生成器。给定一个父子数组,它可以将其正确输出为一个复选框字符串,然后通过CSS设置样式 它需要两个值。树数组和选定的数组。当它读取一个选定的值时,它会附加“checked”,但当它不读取时,会附加一个正常的复选框字符串 但是,一旦它附加了一个未选中的复选框,它就只能显示最后选定的值,并且似乎完全忘记了数组的其余部分 public function genTree($tree, $selectedValues = [1,2,3,4]) { $output = '

我有一个主要工作的递归树视图生成器。给定一个父子数组,它可以将其正确输出为一个复选框字符串,然后通过CSS设置样式

它需要两个值。树数组和选定的数组。当它读取一个选定的值时,它会附加“checked”,但当它不读取时,会附加一个正常的复选框字符串

但是,一旦它附加了一个未选中的复选框,它就只能显示最后选定的值,并且似乎完全忘记了数组的其余部分

public function genTree($tree, $selectedValues = [1,2,3,4])
{
    $output = '<ul class="treeview">';

    foreach($tree as $arr)
    {
        $output .= '<li>';

        foreach($selectedValues as $num)
        {
            if ($num == $arr['id'])
            {
                $output .= '<input checked type="checkbox" id="'.$arr['name'].'" name="selected[]" value="'.$arr['id'].'"></input>';
            } else {
                $output .= '<input type="checkbox" id="'.$arr['name'].'" name="selected[]" value="'.$arr['id'].'"></input>';    
            }
        }

        $output .= '<label for"'.$arr['name'].'">'.ucfirst($arr['name']).'</label>';    

        if (isset($arr['children']) && count($arr['children']) > 0)
        {       
            $output .= $this->genTree($arr['children'], $selectedValues);   
        }
        $output .= '</li>';
    }
    $output .= '</ul>';

    return $output;
}   
公共函数genTree($tree,$selectedValues=[1,2,3,4])
{
$output='
    '; foreach($tree as$arr) { $output.='
  • '; foreach($selectedValues作为$num) { 如果($num==$arr['id'])) { $output.=''; }否则{ $output.=''; } } $output.=''.ucfirst($arr['name'])。'; 如果(isset($arr['children'])和计数($arr['children'])>0) { $output.=$this->genTree($arr['children',$selectedValues); } $output.='
  • '; } $output.='
'; 返回$output; }

第15行似乎是问题所在,但除此之外,我对可能发生的事情一无所知。任何帮助都将不胜感激

你的第二个
foreach
在我看来很奇怪-你确定你不想要类似
if(在数组(…)
的东西,而不是
foreach
中的
if

您的
属性的
上也缺少
=


否则,递归逻辑和变量传递看起来不错。

一个示例数组和/或函数调用的结果输出会很有帮助。你的第二个
foreach
在我看来很奇怪-你确定你不想要像
if(in_array(…)
这样的东西吗?这确实起到了作用。在数组中,即。在构建函数时,我考虑的是循环。你能写下这个作为答案吗?谢谢你,我一直在做循环的事情,没有考虑在数组中。