遞歸與迭代的區別與聯繫:
理論上講: 遞歸與迭代是可以相互轉化的.
迭代:把任務拆成成小的步驟,然後一個函數執行各個步驟.
遞歸:是把任務拆成多個簡單的任務,由每個函數去執行.
最重要的區別:
迭代:是一個函數運行多次
遞歸:多個(同名)函數同時運行,一次.
文件目錄操作:
1,只用一個參數來調用mkdir時,待創建的目錄,其父目錄,必須先存在.
2,在PHP5.0以後,新增了第3個 $recursive,以如下方式創建目錄,就算父目錄不存在也會自動創建:mkdir('D:/www/0712/a/b/c/d/e/f',0777,true)
3,rmdir 只能刪除空目錄,刪除非空目錄b,要先使用unlink()刪除目錄下的文件;
4,改名 或 移動目錄:rename('./e','./ee')?'改名成功':'改名失敗'; rename('D:/www/0710/ee/e.txt','E:/e.txt')?'改名成功':'改名失敗';
<?php
//打開一個目錄,然後輸出這個目錄下的所有文件名
function reDir($path){
if(!is_dir($path)){//判斷$path是不是一個目錄
echo '請輸入正確路徑';
return false;
}
$ds=opendir($path);//打開這個目錄
if(!$ds){
echo '打開失敗';
return false;
}
$arr=array();
while(($file=readdir($ds))!==false){//把目錄下的所有文件名放到$arr中
if($file == '.' || $file == '..') {
continue;
}
$arr[]=$file;
}
closedir($ds);
return $arr;
}
// 遞歸創建目錄,下面有兩種方法
function mk_dir1($path) {
// 第一種情況,$path對應已經存在. 直接return true;
if(is_dir($path)) {
return true;
}
// 判斷$path的父目錄存在
if(is_dir(dirname($path))) {
return mkdir($path);//如果存在則直接創建
}
// 如果父目錄也不存在,只好調用自己先去創建父目錄.
if(mk_dir(dirname($path))) {
return mkdir($path);
} else {
return false;
}
}
function mk_dir2($path) {
if(is_dir($path)) {
return true;
}
if(is_dir(dirname($path))||mk_dir(dirname($path))) {
return mkdir($path);
}
}
// 迭代創建目錄
function mk_dir3($dir){
if(!is_dir($dir)){
$arr=explode('/',$dir);
$xdir=$arr[0];
for($k=1;$k<count($arr);$k++){
$xdir.='/'.$arr[$k];
if(!is_dir($xdir)){
if(mkdir($xdir)){
echo'創建成功'.'<br/>';
}
}
}
}
}
//級聯刪除,僅僅刪除指定目錄和目錄裏的文件
function deleteDir($path){//沒有檢測目錄是否存在
$handle=opendir($path);
while(false!==($file=readdir($handle))){
if($file!='.'&&$file!='..'){
$subpath=$path.'/'.$file;
if(is_file($subpath)){
unlink($subpath);
}
if(is_dir($subpath)){
deleteDir($subpath);
}
}
}
closedir($handle);
return rmdir($path);
}
// 遞歸讀目錄
function recdir($path,$lev) {
if(!is_dir($path)) {
return;
}
$dh = opendir($path);
while(false !== ($sub = readdir($dh))) {
if($sub == '.' || $sub == '..') {
continue;
}
echo str_repeat(' ',$lev),'├','─',$sub,'<br />';
// 如果讀到的是目錄,則繼續調用自身,繼續深入的讀
if(is_dir($path . '/' . $sub)) {
recdir($path . '/' . $sub,$lev+1);
}
}
closedir($dh);
}
//mk_dir3('D:/WWW/a/b/c/d');
//deleteDir('D:/WWW/a/b/c');
recdir('./rec',2);
?>