递归与迭代学习(联级目录的创建与删除)

一般来说,递归和迭代是可以互相转换的。
迭代是有点类似栈的概念,后进先出,
可以使用 array_pop 和array_push函数来用数组来实现栈的概念。
下面看两个程序,及实现图就懂了: 

/***************************************************************************************************
                    递归法创建和删除联级目录
****************************************************************************************************/ 
<?php
 
//递归创建目录,完成一次性 ./a/b/c/d/e目录
//方法一
function mk_dir($path){
//运气非常好,这个目录存在,这样返回TRUE就可以了
if(is_dir($path)){
return true;
}
//运气一般,目录的父目录存在
if(is_dir(dirname($path))){
return mkdir($path);
}
//运气较差,父目录也不存在,创建父目录
mk_dir(dirname($path));
return mkdir($path);
}
echo mk_dir('./a/ba/c/d/e/f')?'OK':"false";
 
 
//方法二:
function mk_dir2($path){
//如果目录已经存在,直接返回
if(is_dir($path))
return true;
//如果父目录不存在则创建  父目录存在或者创建一个父目录
return is_dir(dirname($path))||mk_dir2(dirname($path))?mkdir($path):false;
}
echo mk_dir2('./a/b/c/d/e/f')?'OK':"false";
 
//方法三  使用php5.0以后的自带的函数
echo mkdir('./a/bss/c/d/e/f',077,true)?'OK':"false";
 
 
//递归删除目录
function deldir($path){
if(!is_dir($path)){
return NULL;
}
 
$dh = opendir($path);
while(($row = readdir($dh))!== false){
if($row == '.' || $row == '..'){
continue;
}
//echo "<br/>",$path.'/'.$row." delete successful";
//判读是否是普通文件
if(!is_dir($path.'/'.$row)){
unlink($path.'/'.$row);
}else{
deldir($path.'/'.$row);
}
}
closedir($dh);
rmdir($path);
echo "<br/>",$path." delete successful";
return true;
}
 
echo deldir('./a')?"<br/>删除成功":"<br/>删除失败";
 
?>

 

结果图:
 图片

 
/***************************************************************************************************
                    迭代法创建和删除联级目录
****************************************************************************************************/ 
<?php
 
//迭代创建目录
//./a/b/c/d/e/f/g
 
function mk_dir($path){
$arr = array();
while(!is_dir($path)){
//如果还不是目录则是我的工作
往数组最后一个单元压入要创建的目录
//array_push($arr,$path);
//往数组开头一个单元压入要创建的目录
array_unshift($arr,$path);
//获取父目录
$path = dirname($path);
}
//print_r($arr);
 
if(empty($arr)){
echo "<br/>the directory is exists!";
return true;
}
 
foreach($arr as $v){
echo "<br/>Create new directoty successful for $v";
mkdir($v);
}
while(($path_dir = array_pop($arr))!== null){
echo "<br/>delete directoty successful for $path_dir";
rmdir($path_dir);
 
}
 
return true;
}
 
mk_dir("./a/b/c/d/e/f/g/h");
 
?>

 

 

图片

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

"小夜猫&小懒虫&小财迷"的男人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值