RecursiveIteratorIterator and RecursiveDirectoryIterator to nested html lists

后端 未结 2 1610
执笔经年
执笔经年 2020-12-03 15:57

Here\'s my php script:



        
2条回答
  •  长情又很酷
    2020-12-03 16:57

    Here is one using DomDocument

    The basic idea is the contents of each directory is represented by a

      and each element in the directory by a

    • If element is a non-empty directory it will contain a
        to represent its contens and so on.

        $path = $_SERVER['DOCUMENT_ROOT'].'/test';
        $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
        $dom = new DomDocument("1.0");
        $list = $dom->createElement("ul");
        $dom->appendChild($list);
        $node = $list;
        $depth = 0;
        foreach($objects as $name => $object){  
            if ($objects->getDepth() == $depth){
        //the depth hasnt changed so just add another li
                $li = $dom->createElement('li', $object->getFilename());
                $node->appendChild($li);
            }
            elseif ($objects->getDepth() > $depth){
        //the depth increased, the last li is a non-empty folder 
                $li = $node->lastChild;
                $ul = $dom->createElement('ul');
                $li->appendChild($ul);
                $ul->appendChild($dom->createElement('li', $object->getFilename()));
                $node = $ul;
            }
            else{
        //the depth decreased, going up $difference directories
                $difference = $depth - $objects->getDepth();
                for ($i = 0; $i < $difference; $difference--){
                    $node = $node->parentNode->parentNode;
                }
                $li = $dom->createElement('li', $object->getFilename());
                $node->appendChild($li);
            }
            $depth = $objects->getDepth();
        }
        echo $dom->saveHtml();
        

        The out put will be along the lines of

        • dir1
        • dir2
          • in dir2
            • file in root

提交回复
热议问题