/** * @param string $directory */ public static function getRecursiveTree($directory) { $treeIterator = new \RecursiveTreeIterator(new \RecursiveDirectoryIterator($directory, \FilesystemIterator::SKIP_DOTS)); $treeIterator->setPrefixPart(\RecursiveTreeIterator::PREFIX_MID_HAS_NEXT, '| '); $treeIterator->setPrefixPart(\RecursiveTreeIterator::PREFIX_END_HAS_NEXT, '|--'); $treeIterator->setPrefixPart(\RecursiveTreeIterator::PREFIX_END_LAST, '`--'); $files = array(); foreach ($treeIterator as $file) { $foo = explode(DIRECTORY_SEPARATOR, $file); $file = array_shift($foo) . ' ' . array_pop($foo); $files[] = $file; } return \implode(PHP_EOL, $files); }
/** * @param \RecursiveIterator $iterator */ public function __construct(\RecursiveIterator $iterator) { parent::__construct($iterator); $this->setPrefixPart(self::PREFIX_LEFT, ''); $this->setPrefixPart(self::PREFIX_MID_HAS_NEXT, '│ '); $this->setPrefixPart(self::PREFIX_END_HAS_NEXT, '├ '); $this->setPrefixPart(self::PREFIX_END_LAST, '└ '); }
public function current() { return str_replace($this->getInnerIterator()->current(), substr(strrchr($this->getInnerIterator()->current(), DIRECTORY_SEPARATOR), 1), parent::current()); }
<?php $rait = new RecursiveArrayIterator(['a' => 0, 1, 'b' => array(2, 3, 'c' => array('d' => 4, 5), 6, 7), 8, 9, array(0, 1)]); $rtit = new RecursiveTreeIterator($rait); $rtit_bypass = new RecursiveTreeIterator($rait, RecursiveTreeIterator::BYPASS_CURRENT); foreach ($rtit as $key => $val) { var_dump($rtit->key()); } foreach ($rtit_bypass as $key => $val) { var_dump($rtit_bypass->key()); }
<?php $arr = array(0 => array("a", 1), "a" => array(2, "b", 3 => array(4, "c"), "3" => array(4, "c"))); $it = new RecursiveArrayIterator($arr); $it = new RecursiveTreeIterator($it); echo "----\n"; echo $it->getPostfix(); echo "\n\n"; echo "----\n"; $it->setPostfix("POSTFIX"); echo $it->getPostfix(); echo "\n\n"; echo "----\n"; foreach ($it as $k => $v) { echo "[{$k}] => {$v}\n"; } echo "----\n"; $it->setPostfix(""); echo $it->getPostfix(); echo "\n\n"; echo "----\n"; foreach ($it as $k => $v) { echo "[{$k}] => {$v}\n"; } ?> ===DONE===
<?php $rait = new RecursiveArrayIterator([0, 1, [2, 3, [4, 5], 6, 7], 8, 9, [0, 1]]); $rtit = new RecursiveTreeIterator($rait); foreach ($rtit as $key => $val) { var_dump($rtit->getPrefix()); }
<?php $rait = new RecursiveArrayIterator([]); $rtit = new RecursiveTreeIterator($rait); var_dump($rtit->getPostfix()); var_dump($rtit->setPostfix('xx')); var_dump($rtit->getPostfix());
<?php $ary = array("a" => array("b"), "c" => array("d")); $it = new RecursiveArrayIterator($ary); $it = new RecursiveTreeIterator($it); for ($i = 0; $i < 6; ++$i) { $it->setPrefixPart($i, $i); } foreach ($it as $k => $v) { echo "[{$k}] => {$v}\n"; } try { $it->setPrefixPart(-1, ""); $it->setPrefixPart(6, ""); } catch (OutOfRangeException $e) { echo "OutOfRangeException thrown\n"; } try { $it->setPrefixPart(6, ""); } catch (OutOfRangeException $e) { echo "OutOfRangeException thrown\n"; } ?> ===DONE===
<?php $rait = new RecursiveArrayIterator([0, 1, [2, 3, [4, 5], 6, 7], 8, 9, [0, 1]]); $rtit = new RecursiveTreeIterator($rait); $rtit_curr = new RecursiveTreeIterator($rait, RecursiveTreeIterator::BYPASS_CURRENT); foreach ($rtit as $key => $val) { var_dump($rtit->current()); } foreach ($rtit_curr as $key => $val) { var_dump($rtit_curr->current()); }
<?php $ary = array(0 => array("a", 1), "a" => array(2, "b", 3 => array(4, "c"), "3" => array(4, "c"))); $it = new RecursiveTreeIterator(new RecursiveArrayIterator($ary)); foreach ($it as $k => $v) { echo '[' . $it->key() . '] => ' . $it->getPrefix() . $it->getEntry() . $it->getPostfix() . "\n"; } ?> ===DONE===
<?php $arr = array("a" => array("b")); $it = new RecursiveArrayIterator($arr); $it = new RecursiveTreeIterator($it); $it->setPrefixPart(1); // Should throw a warning as setPrefixPart expects 2 arguments $a = new stdClass(); $it->setPrefixPart($a, 1); // Should throw a warning as setPrefixPart expects argument 1 to be long integer $it->setPrefixPart(1, $a); // Should throw a warning as setPrefixPart expects argument 2 to be a string ?> ===DONE===
<?php $ary = array(0 => array((string) "binary", "abc2", 1), (string) "binary" => array(2, "b", 3 => array(4, "c"), "4abc" => array(4, "c"))); $it = new RecursiveTreeIterator(new RecursiveArrayIterator($ary), 0); foreach ($it as $k => $v) { var_dump($v); } echo "\n----------------\n\n"; foreach ($it as $k => $v) { var_dump($k); } echo "\n----------------\n\n"; echo "key, getEntry, current:\n"; foreach ($it as $k => $v) { var_dump($it->key(), $it->getEntry(), $it->current()); } ?> ===DONE===
<?php $rait = new RecursiveArrayIterator([0, 1, [2, 3]]); $rtit = new RecursiveTreeIterator($rait); try { $rtit->setPrefixPart(6, ""); } catch (OutOfRangeException $e) { echo $e->getMessage(), PHP_EOL; }
<?php $rait = new RecursiveArrayIterator([0, 1, [2, 3, [4, 5]]]); $rtit = new RecursiveTreeIterator($rait); foreach ($rtit as $key => $val) { var_dump($rtit->getEntry()); }