Frage

Ich arbeite an einem Projekt, Datei-Manager und kann nicht scheinen, meinen Kopf um eine rekursive Verzeichnis tun Auflistung, wo ich nur die Verzeichnisse erhalten. Alles, was ich habe versucht, entweder Blätter von leeren Unterverzeichnissen oder nicht funktioniert, wenn ich versuche, es in die Rück Struktur meines jQuery Baum zu analysieren.

Ich habe versucht, ein Array verwendet wird, und die rekursiven Iteratoren aber nichts für mich bisher geleistete Arbeit.

** Update **

Danke an alle, die Eingabe ich meinen Code schnitzte habe nach unten an:

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;
}

}

Das gibt mir die Ausgabe:

/home/printshi/public_html/test/orders/88a0a01afd3728af8f6710ed874267f3
/Aggie_Stuff
/Misc
/Misc/Christmas
/Misc/Christmas/santa
/Misc/Christmas/frosty
/Misc/test1
/Geek_Stuff

, die mir näher ist immer, mein Problem ist jetzt das, was ich tun muss, ist, alle diese Elemente in HTML wickeln, so dass ich eine Ausgabe erhalten wie:

<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>

Die Rekursion Teil verstehe ich, es ist nur bekommen es die HTML zu tun, dass ich kann meinen Kopf nicht scheinen, herum zu erhalten, egal wie sehr ich mich anstrenge.

War es hilfreich?

Lösung

Haben Sie einen Blick auf die DirectoryIterator Klasse, vor allem die isDir Funktion.

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

Andere Tipps

RecursiveIteratorIterator und RecursiveDirectoryIterator können dies für Sie:

$iter = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
foreach($iter as $file) {
    if ($file->getFilename() == '.') {
        echo $file->getPath() . PHP_EOL;
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top