根據php遞迴讀取資料夾生成檔案樹
class Tree
{
public $arr = array();
public $icon = array(
'│',
'├─',
'└─'
);
public $ret;
public function set_tree($arr = array())
{
$this->arr = $arr;
}
public function get_child($myid)
{
$newarr = array();
if (is_array($this->arr)) {
foreach ($this->arr as $id => $a) {
if ($a['pid'] == $myid) {
$newarr[$id] = $a;
}
}
}
return $newarr ? $newarr : false;
}
public function getArray($myid = 0, $sid = 0, $adds = '')
{
$number = 1;
$child = $this->get_child($myid);
if (is_array($child)) {
$total = count($child);
foreach ($child as $a) {
$j = $k = '';
if ($number == $total) {
$j .= $this->icon[2];
} else {
$j .= $this->icon[1];
$k = $adds ? $this->icon[0] : '';
}
$spacer = $adds ? $adds . $j : '';
$a['name'] = $spacer . ' ' . $a['name'];
$this->ret[] = $a;
$fd = $adds . $k . ' ';
$this->getArray($a['id'], $sid, $fd);
$number++;
}
}
return $this->ret;
}
public function get_tree($myid, $str, $sid = 0, $adds = '')
{
$number = 1;
$child = $this->get_child($myid);
if (is_array($child)) {
$total = count($child);
foreach ($child as $a) {
$id = $a['id'];
$j = $k = '';
if ($number == $total) {
$j .= $this->icon [2];
} else {
$j .= $this->icon [1];
$k = $adds ? $this->icon [0] : '';
}
$spacer = $adds ? $adds . $j : '';
$select = $id == $sid ? 'selected' : '';
$this->ret .= sprintf($str, $id, $select, $spacer, $a['name']);
$this->get_tree($id, $str, $sid, $adds . $k . ' ');
$number++;
}
}
return $this->ret;
}
public function read_all_dir($dir, $onlyDir = true, $ignore = [])
{
$result = array();
$handle = opendir($dir);
if ($handle) {
while (($file = readdir($handle)) !== false) {
if (in_array($file, $ignore)) continue;
if ($file != '.' && $file != '..') {
$cur_path = $dir . DIRECTORY_SEPARATOR . $file;
if (is_dir($cur_path)) {
$result[$file] = $this->read_all_dir($cur_path, $onlyDir);
} else {
if (!$onlyDir) {
$result[] = $file;
}
}
}
}
closedir($handle);
}
return $result;
}
public function arrshift($array, $pid = 0)
{
static $r = [];
static $index = 1;
if (is_array($array) && count($array) > 0) {
foreach ($array as $k => $v) {
$r[] = array(
'id' => $index,
'pid' => $pid,
'name' => is_array($v) ? $k : $v
);
$index++;
$this->arrshift($v, $index - 1);
}
}
return $r;
}
}
使用示例
$tree = new Tree ();
$data = $tree->read_all_dir(realpath('../file_dir'), false, ['.git', '.idea', 'vendor']);
$data = $tree->arrshift($data);
$tree->set_tree($data);
$data = $tree->getArray();
foreach ($data as $value) {
echo $value['name'];
echo '<br/>';
echo '<br/>';
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結