递归和迭代以及文件目录操作

递归与迭代的区别与联系:

理论上讲递归与迭代是可以相互转化的.

 

迭代:把任务拆成成小的步骤,然后一个函数执行各个步骤.

递归是把任务拆成多个简单的任务,由每个函数去执行.

最重要的区别

迭代:是一个函数运行多次

递归:多个(同名)函数同时运行,一次.


文件目录操作:

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值