php目录操作(递归和迭代)

1、递归获取目录
 //递归获取目录
    function recdir($dir,$lev=1){
	   $dirPath = opendir($dir);//打开目录
	   //读取目录
	   while(($row = readdir($dirPath)) !== false){
	        //如果是目录
			if($row =="." || $row =='..'){//如果目录是.和 ..则继续
			    continue;
			}
			//如果不是.和..├─
            echo str_repeat('├─',$lev).$row.'<br>';
			//判断是否目录
			if(is_dir($dir.'/'.$row)){
			    recdir($dir.'/'.$row,$lev+1);
			}
			


	   }
       closedir($dirPath);
	}

2、递归创建级联目录

/*
     创建级联目录
	 例:./a/b/c/d/e/f
	*/
    function mk_dir($path){
	   //如何运气好$path就是一个目录
	   if(is_dir($path) && file_exists($path)){
	       return $path;
	   }

       //如何运气一般好,即$path的父级目录存在
	   if(is_dir(dirname($path))){
	      return mkdir($path);
		   
	   }
	   //如果运气不好父目录也不存在
	   mk_dir(dirname($path));
	   return mkdir($path);

	
	}

	echo mk_dir('./a/b/c/d/e/f')? 'ok':'fail';

   方法二:

function mk_dir($path){
	    if(is_dir($path)){
		  return true;
	    }

		return is_dir(dirname($path)) || mk_dir(dirname($path)) ? mkdir($path) : 'false';
	
	}
	echo mk_dir('./aa/bb/cc') ? 'ok' : 'fail';

3、递归删除目录和文件

 //递归删除文件和目录
	function deldir($path){
	   //如果不是目录
	   if(!is_dir($path)){
	       unlink($path);
		   return true;
	   }
	   //如果是目录
	   $dh = opendir($path); 
	   while(($row = readdir($dh)) !== false){	  
	       if($row == '.' || $row == '..'){
		       continue;
		   } 
           //不等于.和.. 判断是否还是目录
		   if(is_dir($path.'/'.$row)){ 
		      deldir($path.'/'.$row);	  
		   }else{   
		      //不是目录
			  unlink($path.'/'.$row); 
		   }

	   }
	   closedir($dh);
	   rmdir($path);
	   echo '删除了'.$path.'<br>';

	}
	deldir('./aa') ? 'OK':'false';

4、迭代创建目录

function mk_dir($path){
		$arr = array();
		 //是目录
	     while(!is_dir($path)){
			  array_unshift($arr,$path);
			  $path = dirname($path);
		 }
         
		 //是目录
         if(empty($arr)){
		      return true;
		 }
		 
		 foreach($arr as $v){
		     echo '创建'.$v.'<br>';
			 mkdir($v);
		 }
		 return true;
		 //print_r($arr); 
			 
	
	}
    echo '<pre>';
	mk_dir('./a/b/c/d');

5、进出栈示例

function mk_dir($path){
	    $arr = array();
		while(!is_dir($path)){
		    array_push($arr,$path);//进栈
			$path = dirname($path);
		}
		
		if(empty($arr)){
		   return true;
		}
		
		while(count($arr)){  
		   $p = array_pop($arr);//出栈,出栈顺序,先进后出
		   echo $p.'出栈<br>';
		   
		   mkdir($p);
		}
		return true;
		
	}
	
	
    echo '<pre>';
	mk_dir('./e/b/c/d');







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值