PHP讀取目錄樹的實現(xiàn)方法分析
本文實例講述了PHP讀取目錄樹的實現(xiàn)方法。分享給大家供大家參考,具體如下:
前一陣時間面試XX公司筆試題中竟然有這樣一道題:
使用PHP列出目錄樹!
當時一看就懵逼了!基本的思路還是有的,不過是使用遞歸算法,但對PHP操作目錄文件的方法卻不是很了解,所以今天好好補習(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) {
//判斷是否是.和..因為這兩個東西神馬也不是。。。
if(in_array($fileName, array('.', '..'))) {
continue;
}
//路徑加文件名
$fullName = $pathName.'/'.$fileName;
//如果是目錄的話就繼續(xù)遍歷這個目錄
if(is_dir($fullName)) {
//將這個目錄中的文件信息存入到數(shù)組中
$result[$fullName] = recurDir($fullName);
}else {
//如果是文件就先存入臨時變量
$temp[] = $fullName;
}
}
//取出文件
if($temp) {
foreach($temp as $f) {
$result[] = $f;
}
}
return $result;
}
//驗證一下這個函數(shù)是否好用!
$tree = recurDir('cart_ajax');
echo "<pre>";
print_r($tree);
echo "</pre>";
?>
cart_ajax文件夾結(jié)構(gòu)

js文件夾下的內(nèi)容

顯示結(jié)果

大功告成了!目錄的級別確實是這樣的,不過看起來也太low了吧!稍微美化一下吧!
function beautifulTree($arr, $l = '-|')
{
static $l = '';
static $str = '';
//遍歷剛才得到的目錄樹
foreach($arr as $key=>$val) {
//如果是個數(shù)組,也就代表它是個目錄,那么就在它的子文件中加入-|來表示是下一級吧
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è)計算法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家PHP程序設(shè)計有所幫助。
相關(guān)文章
phpmyadmin安裝時提示:Warning: require_once(./libraries/common.inc
common.inc.php這個文件是存在的,而且系統(tǒng)中php也不裝在C盤根目錄下,怎么會有這樣的提示呢?經(jīng)過一陣調(diào)試終于發(fā)現(xiàn)解決方法2011-08-08
php結(jié)合web uploader插件實現(xiàn)分片上傳文件
這篇文章主要為大家詳細介紹了php結(jié)合web uploader插件實現(xiàn)分片上傳文件, 采用大文件分片并發(fā)上傳,極大的提高了文件上傳效率,感興趣的小伙伴們可以參考一下2016-05-05
php中將圖片gif,jpg或mysql longblob或blob字段值轉(zhuǎn)換成16進制字符串
php如何將圖片gif,jpg或mysql longblob或blob字段值轉(zhuǎn)換成16進制字符串!經(jīng)過查找居然如此簡單,一個函數(shù)就搞定了。2011-08-08
通過php動態(tài)傳數(shù)據(jù)到highcharts
本文主要介紹了通過php動態(tài)傳數(shù)據(jù)到highcharts的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04
關(guān)于url地址傳參數(shù)時字符串有回車造成頁面腳本賦值失敗的解決方法
本篇文章是對關(guān)于url地址傳參數(shù)時字符串有回車造成頁面腳本賦值失敗的解決方法進行了詳細的分析介紹,需要的朋友參考下2013-06-06
PHP錯誤抑制符(@)導(dǎo)致引用傳參失敗Bug的分析
今天cici網(wǎng)友發(fā)來一個問題, 說是在函數(shù)調(diào)用參數(shù)前面使用錯誤抑制符號(@)的時候, 貌似引用傳參就失效了. 他想讓我?guī)退獯馂槭裁?2011-05-05

