遞歸和迭代以及文件目錄操作

遞歸與迭代的區別與聯繫:

理論上講遞歸與迭代是可以相互轉化的.

 

迭代:把任務拆成成小的步驟,然後一個函數執行各個步驟.

遞歸是把任務拆成多個簡單的任務,由每個函數去執行.

最重要的區別

迭代:是一個函數運行多次

遞歸:多個(同名)函數同時運行,一次.


文件目錄操作:

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);
?>



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章