helly Wed Jul 16 14:47:26 2003 EDT Added files: /spl/examples tree.php Log: Add tree example
Index: spl/examples/tree.php +++ spl/examples/tree.php <?php /* tree view example * * Usage: php tree.php <path> * * Simply specify the path to tree with parameter <path>. * * (c) Marcus Boerger */ class sub_dir implements spl_sequence { protected $adir = array(); protected $cnt = 0; protected $path = ""; protected $curr = ""; protected $nodots = true; function __construct($path, $nodots = true) { $this->cnt = 0; $this->path = $path; } function rewind() { while($this->cnt) { unset($this->adir[$this->cnt--]); } $dir = new spl_dir($this->path); $dir->path = ""; $this->adir[1] = $dir; $this->cnt = 1; if ($this->nodots) { while ($this->has_more()) { $ent = $this->current(); if ($ent != '.' && $ent != '..') { break; } $this->next(); } } } function next() { if ($this->cnt) { $dir = $this->adir[$this->cnt]; $ent = $dir->current(); $path = $dir->get_path().'/'.$ent; if ($ent != '.' && $ent != '..' && is_dir($path)) { $new = new spl_dir($path); $new->path = $dir->path.$ent.'/'; $new->cnt = $this->cnt++; $this->adir[$this->cnt] = $new; if ($this->nodots) { while ($new->has_more()) { $ent = $new->current(); if ($ent != '.' && $ent != '..') { break; } $new->next(); } } } $dir->next(); } } function has_more() { while ($this->cnt) { $dir = $this->adir[$this->cnt]; if ($dir->has_more()) { return true; } unset($this->adir[$this->cnt--]); } return false; } function current() { if ($this->cnt) { $dir = $this->adir[$this->cnt]; return $dir->path . $dir->current(); } throw new exception("No more elements available"); } } foreach(new sub_dir($argv[1]) as $f) { echo "$f\n"; } ?> -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php