前一阵时间面试xx公司笔试题中竟然有这样一道题:
使用PHP列出目录树!
当时一看就懵逼了!基本的思路还是有的,不过是使用递归算法,但对PHP操作目录文件的方法却不是很了解,所以今天好好补习一下!
解题思路:
<code><span><?php</span><span><span>function</span><span>recurDir</span><span>(<span>$pathName</span>)</span>
{</span><span>//将结果保存在result变量中</span><span>$result</span> = <span>array</span>();
<span>$temp</span> = <span>array</span>();
<span>//判断传入的变量是否是目录</span><span>if</span>(!is_dir(<span>$pathName</span>) || !is_readable(<span>$pathName</span>)) {
<span>return</span><span>null</span>;
}
<span>//取出目录中的文件和子目录名,使用scandir函数</span><span>$allFiles</span> = scandir(<span>$pathName</span>);
<span>//遍历他们</span><span>foreach</span>(<span>$allFiles</span><span>as</span><span>$fileName</span>) {
<span>//判断是否是.和..因为这两个东西神马也不是。。。</span><span>if</span>(in_array(<span>$fileName</span>, <span>array</span>(<span>'.'</span>, <span>'..'</span>))) {
<span>continue</span>;
}
<span>//路径加文件名</span><span>$fullName</span> = <span>$pathName</span>.<span>'/'</span>.<span>$fileName</span>;
<span>//如果是目录的话就继续遍历这个目录</span><span>if</span>(is_dir(<span>$fullName</span>)) {
<span>//将这个目录中的文件信息存入到数组中</span><span>$result</span>[<span>$fullName</span>] = recurDir(<span>$fullName</span>);
}<span>else</span> {
<span>//如果是文件就先存入临时变量</span><span>$temp</span>[] = <span>$fullName</span>;
}
}
<span>//取出文件</span><span>if</span>(<span>$temp</span>) {
<span>foreach</span>(<span>$temp</span><span>as</span><span>$f</span>) {
<span>$result</span>[] = <span>$f</span>;
}
}
<span>return</span><span>$result</span>;
}
<span>//验证一下这个函数是否好用!</span><span>$tree</span> = recurDir(<span>'cart_ajax'</span>);
<span>echo</span><span>"<pre class="brush:php;toolbar:false;">"</span>;
print_r(<span>$tree</span>);
<span>echo</span><span>"cart_ajax文件夹结构

js文件夹下的内容

立即学习“PHP免费学习笔记(深入)”;
显示结果

大功告成了!目录的级别确实是这样的,不过看起来也太low了吧!稍微美化一下吧!
<code><span><span>function</span><span>beautifulTree</span><span>(<span>$arr</span>, <span>$l</span> = <span>'-|'</span>)</span>
{</span><span>static</span><span>$l</span> = <span>''</span>;
<span>static</span><span>$str</span> = <span>''</span>;
<span>//遍历刚才得到的目录树</span><span>foreach</span>(<span>$arr</span><span>as</span><span>$key</span>=><span>$val</span>) {
<span>//如果是个数组,也就代表它是个目录,那么就在它的子文件中加入-|来表示是下一级吧</span><span>if</span>(is_array(<span>$arr</span>[<span>$key</span>])) {
<span>$str</span>.=<span>$l</span>.<span>$key</span>.<span>"<br/>"</span>;
<span>$l</span>.=<span>'-|'</span>;
beautifulTree(<span>$arr</span>[<span>$key</span>], <span>$l</span>);
}<span>else</span> {
<span>$str</span>.=<span>$l</span>.<span>$val</span>.<span>"<br/>"</span>;
}
}
<span>$l</span> = <span>''</span>;
<span>return</span><span>$str</span>;
}
<span>$beautifulTree</span> = beautifulTree(<span>$tree</span>);
<span>echo</span><span>"<pre class="brush:php;toolbar:false;">"</span>;
print_r(<span>$beautiful</span>);
<span>echo</span><span>"显示结果

以上就介绍了PHP读取目录树,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号