递归与迭代的区别与联系:
理论上讲: 递归与迭代是可以相互转化的.
迭代:把任务拆成成小的步骤,然后一个函数执行各个步骤.
递归:是把任务拆成多个简单的任务,由每个函数去执行.
最重要的区别:
迭代:是一个函数运行多次
递归:多个(同名)函数同时运行,一次.
文件目录操作:
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);
?>