PHP讀取目錄樹的實(shí)現(xiàn)方法分析
本文實(shí)例講述了PHP讀取目錄樹的實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
前一陣時(shí)間面試XX公司筆試題中竟然有這樣一道題:
使用PHP列出目錄樹!
當(dāng)時(shí)一看就懵逼了!基本的思路還是有的,不過是使用遞歸算法,但對(duì)PHP操作目錄文件的方法卻不是很了解,所以今天好好補(bǔ)習(xí)一下!
解題思路:
1. 列出目錄中的文件。
2. 判斷是否是目錄,如果是目錄就繼續(xù)遞歸。
3. 將所有文件名,存入多維數(shù)組
<?php function recurDir($pathName) { //將結(jié)果保存在result變量中 $result = array(); $temp = array(); //判斷傳入的變量是否是目錄 if(!is_dir($pathName) || !is_readable($pathName)) { return null; } //取出目錄中的文件和子目錄名,使用scandir函數(shù) $allFiles = scandir($pathName); //遍歷他們 foreach($allFiles as $fileName) { //判斷是否是.和..因?yàn)檫@兩個(gè)東西神馬也不是。。。 if(in_array($fileName, array('.', '..'))) { continue; } //路徑加文件名 $fullName = $pathName.'/'.$fileName; //如果是目錄的話就繼續(xù)遍歷這個(gè)目錄 if(is_dir($fullName)) { //將這個(gè)目錄中的文件信息存入到數(shù)組中 $result[$fullName] = recurDir($fullName); }else { //如果是文件就先存入臨時(shí)變量 $temp[] = $fullName; } } //取出文件 if($temp) { foreach($temp as $f) { $result[] = $f; } } return $result; } //驗(yàn)證一下這個(gè)函數(shù)是否好用! $tree = recurDir('cart_ajax'); echo "<pre>"; print_r($tree); echo "</pre>"; ?>
cart_ajax文件夾結(jié)構(gòu)
js文件夾下的內(nèi)容
顯示結(jié)果
大功告成了!目錄的級(jí)別確實(shí)是這樣的,不過看起來(lái)也太low了吧!稍微美化一下吧!
function beautifulTree($arr, $l = '-|') { static $l = ''; static $str = ''; //遍歷剛才得到的目錄樹 foreach($arr as $key=>$val) { //如果是個(gè)數(shù)組,也就代表它是個(gè)目錄,那么就在它的子文件中加入-|來(lái)表示是下一級(jí)吧 if(is_array($arr[$key])) { $str.=$l.$key."<br/>"; $l.='-|'; beautifulTree($arr[$key], $l); }else { $str.=$l.$val."<br/>"; } } $l = ''; return $str; } $beautifulTree = beautifulTree($tree); echo "<pre>"; print_r($beautiful); echo "</pre>";
顯示結(jié)果
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP目錄操作技巧匯總》、《php文件操作總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
PHP Zip壓縮 在線對(duì)文件進(jìn)行壓縮的函數(shù)
PHP在線對(duì)文件進(jìn)行Zip 壓縮函數(shù)代碼,用于使用PHP在線創(chuàng)建ZIP壓縮文件。2010-05-05通過PHP CLI實(shí)現(xiàn)簡(jiǎn)單的數(shù)據(jù)庫(kù)實(shí)時(shí)監(jiān)控調(diào)度
繼續(xù)CLI模式試驗(yàn),這次通過使用之前的“帶延時(shí)的死循環(huán)”方法,來(lái)實(shí)現(xiàn)個(gè)簡(jiǎn)單的數(shù)據(jù)庫(kù)實(shí)時(shí)監(jiān)控調(diào)度功能。2009-07-07PHP+JS實(shí)現(xiàn)大文件切片上傳功能實(shí)現(xiàn)實(shí)例源碼
這篇文章主要介紹了PHP+JS實(shí)現(xiàn)大文件切片上傳功能實(shí)現(xiàn)實(shí)例源碼,需要的朋友可以參考下2023-05-05PHP實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)的幾種常見方式總結(jié)
PHP實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)有多種方式,常用的包括使用header()函數(shù)、使用JavaScript進(jìn)行跳轉(zhuǎn)、使用meta標(biāo)簽、使用超鏈接等,下面分別詳細(xì)介紹這幾種方式,并舉例說明,需要的朋友可以參考下2023-11-11PHP基于面向?qū)ο髮?shí)現(xiàn)的留言本功能實(shí)例
這篇文章主要介紹了PHP基于面向?qū)ο髮?shí)現(xiàn)的留言本功能,結(jié)合實(shí)例形式分析了php基于面向?qū)ο蟮牧粞员鞠嚓P(guān)寫入、顯示查看、日志記錄等相關(guān)方法封裝與使用技巧,需要的朋友可以參考下2018-04-04php生成短網(wǎng)址/短鏈接原理和用法實(shí)例分析
這篇文章主要介紹了php生成短網(wǎng)址/短鏈接原理和用法,結(jié)合實(shí)例形式分析了php生成短網(wǎng)址/短鏈接的基本原理、實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2020-05-05PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之對(duì)象克隆clone和魔術(shù)方法__clone()用法分析
這篇文章主要介紹了PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之對(duì)象克隆clone和魔術(shù)方法__clone()用法,結(jié)合具體實(shí)例形式分析了php面向?qū)ο蟪绦蛟O(shè)計(jì)中對(duì)象克隆clone和魔術(shù)方法__clone()相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2019-06-06PHP設(shè)計(jì)模式之策略模式原理與用法實(shí)例分析
這篇文章主要介紹了PHP設(shè)計(jì)模式之策略模式原理與用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了策略模式的概念、原理及php實(shí)現(xiàn)與使用策略模式的相關(guān)操作技巧,需要的朋友可以參考下2019-04-04