2010-06-30 3 views
2

Я работаю над проектом файлового менеджера и, похоже, не вижу своей цели в создании рекурсивного каталога, в котором я получаю только каталоги. Все, что я пробовал, либо оставляет пустые подкаталоги, либо не работает, когда я пытаюсь разобрать его в структуре возврата в дерево jQuery.PHP рекурсивный список каталогов - каталоги ТОЛЬКО

Я пробовал использовать массив и рекурсивные итераторы, но до сих пор ничего не работает.

** Обновление **

Благодаря входу каждого я вырезал мой код до:

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, поэтому t Шляпа я получаю выход, как:

<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

Хотя вы добавили этот PHP 5, вы используете стиль объекта, который очень ясно из PHP 4. Пожалуйста, обратите внимание, используя [видимость ключевые слова] (http://www.php.net/manual/en/language.oop5.visibility.php) перед вашими методами и вместо ключевого слова 'var' для ваших свойств. – Charles

+0

См. Мой ответ здесь для недостающей ссылки: http://stackoverflow.com/questions/2207599/multidimensional-array-iteration/2207739#2207739 - Вместо hardcoding '' вы используете '$ this-> key()' – Gordon

ответ

6

Посмотрите на класс DirectoryIterator, особенно на функцию isDir.

$iterator = new DirectoryIterator(dirname(__FILE__)); 
foreach ($iterator as $fileinfo) { 
    if ($fileinfo->isDir() && !$fileinfo->isDot()) { 
     echo $fileinfo->getFilename() . "\n"; 
     // recursion goes here. 
    } 
} 
2

RecursiveIteratorIterator и RecursiveDirectoryIterator может сделать это для вас:

$iter = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)); 
foreach($iter as $file) { 
    if ($file->getFilename() == '.') { 
     echo $file->getPath() . PHP_EOL; 
    } 
} 
+0

Можете ли вы предоставить некоторую помощь по http://stackoverflow.com/questions/24121723/multidimensional-directory-list-with-recursive-iterator? – YahyaE

Смежные вопросы