从数据数组构建html树,但获取重复节点


Build html tree from data array, but getting duplicates nodes

public function buildHtmlTree2($data, $pid = 0)
{
    $str = '<ul>';
    foreach($data as $key => $value)
    {
        $op = array();
        foreach( $data as $item )
        {
            $str .= '<li>';
            $str .= $item['login'];
            $str .= '</li>';
            if( $item['parent_id'] == $pid )
            {
                $children =  $this->buildHtmlTree2( $data, $item['id'] );
                if( $children ) {
                    $str .= $children;
                }
            }
        }
        $str .= '</ul>';
        return $str;

    }
}
输入数组:

array(
  [0] = array(
    'id' => 1,
    'login' => 'test1',
    'parent_id' => 0
  ),
  [1] = array(
    'id' => 2,
    'login' => 'test2',
    'parent_id' => 1
  ),
  [2] = array(
    'id' => 3,
    'login' => 'test3',
    'parent_id' => 1
  )
)

我正在传递它的id, login, parent_id的数组,但在输出中我得到重复的条目,我试图取消设置$data[$key]并将其作为参考,但我认为这不是一个好方法,如何避免重复在这个函数中,我要添加/编辑什么?我一时想不明白

public function buildHtmlTree2($data, $pid = 0)
{
    $str = '<ul>';
    foreach($data as $key => $value)
    {
        $op = array();
        foreach( $data as $item )
        {
            if( $item['parent_id'] == $pid )
            {
            $str .= '<li>';
            $str .= $item['login'];
            $str .= '</li>';
                $children =  $this->buildHtmlTree2( $data, $item['id'] );
                if( $children ) {
                    $str .= $children;
                }
            }
        }
        $str .= '</ul>';
        return $str;

    }
}

我已经找到了解决方案,这里的代码…