少し前の○○社の面接の筆記試験でこんな質問がありました:
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">"
cart_ajaxフォルダー構造
jsフォルダーの内容
結果を表示
完了!確かにディレクトリのレベルはこのようになっていますが、低すぎるようです。少し気を引き締めて!
<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">"
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });結果を表示
上記は、ディレクトリ ツリーを読み取るための PHP を内容も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。