zoukankan      html  css  js  c++  java
  • 递归与迭代学习(联级目录的创建与删除)

    一般来说,递归和迭代是可以互相转换的。
    迭代是有点类似栈的概念,后进先出,
    可以使用 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");
     
    ?>
     
    图片
     
     
  • 相关阅读:
    leetcode--Populating Next Right Pointers in Each Node II
    leetcode—Populating Next Right Pointers in Each Node
    Pascal's Triangle II
    leetcode—pascal triangle
    leetcode—triangle
    October 23rd, 2017 Week 43rd Monday
    October 22nd, 2017 Week 43rd Sunday
    October 21st 2017 Week 42nd Saturday
    October 20th 2017 Week 42nd Friday
    October 19th 2017 Week 42nd Thursday
  • 原文地址:https://www.cnblogs.com/lihaiyan/p/4274447.html
Copyright © 2011-2022 走看看