PHP递归树视图生成器只从填充的“选定”数组中选择一个选项?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (53)

我有一个主要工作的递归树视图生成器。给定一个父子数组,它可以正确输出它作为一个复选框的字符串,然后由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;
}   

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

提问于
用户回答回答于

你的第二个foreach看起来很奇怪 - 你确定你不想要一个像if (in_array(...))而不是if一个foreach

<label>也错过=for属性。

否则,你的递归逻辑和变量传递看起来很好。

扫码关注云+社区

领取腾讯云代金券