>  기사  >  백엔드 개발  >  PHP는 디렉토리 트리를 읽습니다.

PHP는 디렉토리 트리를 읽습니다.

WBOY
WBOY원래의
2016-07-29 08:51:192076검색

얼마전 XX회사 면접 필기시험에서 이런 질문이 나왔습니다.

PHP를 사용하여 디렉토리 트리를 나열해보세요!

보자마자 깜놀! 기본적인 아이디어는 그대로인데 재귀적인 알고리즘을 사용하는데, PHP에서 디렉터리 파일을 조작하는 방법에 대해서는 잘 모르기 때문에 오늘은 잘 살펴보도록 하겠습니다!
문제 해결 아이디어:

  1. 디렉토리에 있는 파일을 나열합니다.
  2. 디렉터리인지 확인하고 디렉터리인 경우 재귀를 계속합니다.
  3. 모든 파일 이름을 다차원 배열로 저장
<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">"
; print_r($tree); echo""; ?>

cart_ajax 폴더 구조

PHP는 디렉토리 트리를 읽습니다.

js 폴더의 내용

PHP는 디렉토리 트리를 읽습니다.

결과 표시

PHP는 디렉토리 트리를 읽습니다.

당신 끝났어! 디렉토리 레벨은 원래 이렇지만 너무 낮은 것 같아요! 좀 다듬어주세요!

<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">"
; print_r($beautiful); echo"";

결과 표시

PHP는 디렉토리 트리를 읽습니다.

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

위 내용은 PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.