我正在开发一个文件管理器项目,似乎无法理解我只获取目录的递归目录列表。我尝试过的所有内容都会留下空的子目录,或者在我尝试将其解析为jQuery树的返回结构时无效。
我尝试过使用数组和递归迭代器,但到目前为止我没有任何工作。
**更新**
感谢大家的意见,我已将我的代码缩减为:
class image_management {
private $_user_id;
private $_user_name;
private $_user_path;
/**
* Constructor
*/
function __construct($user_id, $user_name) {
$this->_user_id = $user_id;
$this->_user_name = $user_name;
$this->_user_path = ORDER_ROOT.$this->_user_id;
}
/**
* Cleanup the class and close connections
*
*/
function __destruct() {
}
/**
* Get Image Folders
* Returns an HTML list of the folders under a users
* directory.
*
* @param hash $user_id -user id hash
* @param string $user_name - users email address
* @return string - html list
*/
public function getHTMLTree() {
$html = "<li><a href='#'>";
$html .= $this->_user_name . "</a><ul>";
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($this->_user_path), RecursiveIteratorIterator::SELF_FIRST);
foreach($objects as $file) {
if($file->isDir() ) {
$item = substr($file->getPathname(),strlen($this->_user_path));
echo $item;
}
}
return $html;
}
}
这给了我输出:
/home/printshi/public_html/test/orders/88a0a01afd3728af8f6710ed874267f3
/Aggie_Stuff
/Misc
/Misc/Christmas
/Misc/Christmas/santa
/Misc/Christmas/frosty
/Misc/test1
/Geek_Stuff
这让我更接近,我现在的问题是我需要做的是将所有这些元素包装在HTML中,以便得到如下输出:
<ul>
<li>Aggie_Stuff</li>
<li>Misc<ul>
<li>Christmas<ul>
<li>santa</li>
<li>frosty</li>
</ul>
</li>
<li>test1</li>
</ul>
<li>Geek_Stuff</li>
我理解的递归部分,无论我怎么努力,它只是让它来做我似乎无法理解的HTML。
答案 0 :(得分:6)
查看DirectoryIterator课程,尤其是isDir功能。
$iterator = new DirectoryIterator(dirname(__FILE__));
foreach ($iterator as $fileinfo) {
if ($fileinfo->isDir() && !$fileinfo->isDot()) {
echo $fileinfo->getFilename() . "\n";
// recursion goes here.
}
}
答案 1 :(得分:2)
RecursiveIteratorIterator
和RecursiveDirectoryIterator
可以为您完成此操作:
$iter = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
foreach($iter as $file) {
if ($file->getFilename() == '.') {
echo $file->getPath() . PHP_EOL;
}
}