php - 通过递归函数在php中打印树视图
问题描述
我有一个关于文件夹的树数组。我想把它打印成一棵树。您可以看到如下数组:
[
{
"name": "C:\\xampp\\htdocs\\test\\test.php",
"type": "file",
"priority": 1
},
{
"name": "C:\\xampp\\htdocs\\test\\test.txt",
"type": "file",
"priority": 1
},
{
"name": "C:\\xampp\\htdocs\\test\\test1",
"type": "folder",
"priority": 0,
"subfolders": [
{
"name": "C:\\xampp\\htdocs\\test\\test1\\test2",
"type": "folder",
"priority": 0,
"subfolders": [
{
"name": "C:\\xampp\\htdocs\\test\\test1\\test2\\test4",
"type": "folder",
"priority": 0,
"subfolders": [
{
"name": "C:\\xampp\\htdocs\\test\\test1\\test2\\test4\\test5..txt",
"type": "file",
"priority": 1
}
]
},
{
"name": "C:\\xampp\\htdocs\\test\\test1\\test2\\test6.txt",
"type": "file",
"priority": 1
}
]
},
{
"name": "C:\\xampp\\htdocs\\test\\test1\\test3.txt",
"type": "file",
"priority": 1
}
]
},
{
"name": "C:\\xampp\\htdocs\\test\\test_1.php",
"type": "file",
"priority": 1
}
]
我用这个函数创建了这个数组:
function getDirContents($dir, &$results = array(), $counter = 0 ) {
$files = scandir($dir);
foreach ($files as $key => $value) {
$path = realpath($dir . DIRECTORY_SEPARATOR . $value);
if (!is_dir($path)) {
$results[] = array('name'=>$path,'type'=>'file', 'priority'=>1);
//echo $path;
} else if ($value != "." && $value != "..") {
$results[] = array('name'=>$path,'type'=>'folder','priority'=>0,'subfolders'=>array());
getDirContents($path, $results[count($results)-1]['subfolders']);
}
}
return $results;
}
我用这个函数打印这个数组:
function printGetDirContents($tree,$counter = 1){
foreach ($tree as $key => $value) {
if($value['type']=='folder'){
echo str_repeat('-',$counter*2).$value['name'];
$counter = $counter + 1;
echo '<br><br>';
printGetDirContents($value['subfolders']);
}
if($value['type']=='file'){
echo str_repeat('-',$counter*2).$value['name'];
echo '<br><br>';
}
}
}
当我打印时,我得到这个结果:
--C:\xampp\htdocs\test\test.php
--C:\xampp\htdocs\test\test.txt
--C:\xampp\htdocs\test\test1 <---
--C:\xampp\htdocs\test\test1\test2
--C:\xampp\htdocs\test\test1\test2\test4
--C:\xampp\htdocs\test\test1\test2\test4\test5..txt
----C:\xampp\htdocs\test\test1\test2\test6.txt
----C:\xampp\htdocs\test\test1\test3.txt <---
----C:\xampp\htdocs\test\test_1.php
如您所见,它不是完全的树形视图。因为 test1/test3.txt 应该低于 test1/ 但到目前为止。我尝试用文件对数组进行排序,文件优先级为1,文件夹优先级为0。但它不起作用,这里的排序结果:
$tree = getDirContents('./');
$priority = array_column($tree,'priority');
array_multisort($priority,SORT_DESC,$tree);
printGetDirContents($tree);
结果:
--C:\xampp\htdocs\test\test.php
--C:\xampp\htdocs\test\test.txt
--C:\xampp\htdocs\test\test_1.php
--C:\xampp\htdocs\test\test1
--C:\xampp\htdocs\test\test1\test2
--C:\xampp\htdocs\test\test1\test2\test4
--C:\xampp\htdocs\test\test1\test2\test4\test5..txt
----C:\xampp\htdocs\test\test1\test2\test6.txt
----C:\xampp\htdocs\test\test1\test3.txt
我哪里错了?你能帮助我吗 ?谢谢...
解决方案
推荐阅读
- angular - 错误 TS2322:类型“可观察”
' 不可分配给类型 'Observable ' - php - 无法加载动态库“php_oci8_11g.dll”
- c - 使用 c 编程在列表中添加站时出现分段错误
- java - 在不对所有记录执行循环的情况下从数据库中检索特定数据的最有效方法是什么?
- javascript - 角度服务中的业务规则?
- google-cloud-platform - 我们可以在通过 Google BigQuery 运行的查询上实现数据沿袭吗?
- python - TypeError:不可散列的类型:'LineString'
- python - Python - 如何在不是积分值的积分中绘制参数
- sql - 在 JSON 中搜索 MSSQL
- java - Spring AOP 和 Final 类抛出“无法生成 CGLIB 子类”的问题