首頁 > 後端開發 > php教程 > PHP使用遞歸函數建立多層目錄

PHP使用遞歸函數建立多層目錄

墨辰丷
發布: 2023-03-30 06:32:02
原創
1696 人瀏覽過

本篇文章主要介紹PHP使用遞迴函數建立多層目錄,有興趣的朋友參考下,希望對大家有幫助。

具體如下:

function Directory($dir){
    if(is_dir($dir) || @mkdir($dir,0777)){ //查看目录是否已经存在或尝试创建,加一个@抑制符号是因为第一次创建失败,会报一个“父目录不存在”的警告。

        echo $dir."创建成功<br>";  //输出创建成功的目录

    }else{

        $dirArr=explode(&#39;/&#39;,$dir); //当子目录没创建成功时,试图创建父目录,用explode()函数以&#39;/&#39;分隔符切割成一个数组
        array_pop($dirArr); //将数组中的最后一项(即子目录)弹出来,
        $newDir=implode(&#39;/&#39;,$dirArr); //重新组合成一个文件夹字符串
        Directory($newDir); //试图创建父目录
        if(@mkdir($dir,0777)){
            echo $dir."创建成功<br>";

        } //再次试图创建子目录,成功输出目录名
    }
}

Directory("A/B/C/D/E/F");
登入後複製

輸出結果如圖:

 

但是可以看得出來,寫得也太麻煩了,在手冊裡翻看檔案函數,看到一個dirname()函數,其原型如下:

string dirname ( string $path )

#給出一個包含有指向一個檔案的全路徑的字串,本函數傳回去掉檔案名稱後的目錄名稱。

在 Windows 中,斜線(/)和反斜線(\)都可以用作目錄分隔符號。在其它環境下是斜線(/)。

可以稍稍地優化一下:

function Directory($dir){

    if(is_dir($dir) || @mkdir($dir,0777)){ 

        echo $dir."创建成功<br>";  

    }else{

        Directory(dirname($dir));

        if(@mkdir($dir,0777)){

            echo $dir."创建成功<br>";

        }

    }

}
登入後複製

#效果一樣。
之後我在網路上搜一下答案,找到一個異常精闢的

function Directory( $dir ){  

   return  is_dir ( $dir ) or Directory(dirname( $dir )) and  mkdir ( $dir , 0777);

}
登入後複製

現在來解釋整個函數:

先介紹PHP中邏輯運算子的優先順序:&& > || > and > or,即符號型>字母型,AND型>OR型,所以函數體可以看成:

is_dir ( $dir )  or  (Directory(dirname( $dir ))  and   mkdir ( $dir , 0777));

先判斷目標目錄是否存在,若存在,依or的短路特性,後面的整體被短路,跳過執行;若目標目錄不存在,則執行後面的函數體:

Directory(dirname( $dir ))  and   mkdir ( $dir , 0777)

#我考慮了

##的用意

:先執行遞歸,意在確認其父目錄(dirname($dir))都已經創建完畢,使後面的mkdir()函數不會創建子目錄時找不到父目錄發出警告。

進入遞歸深處後,確認最深處的根目錄存在後,從根目錄向下依序建立目錄。 最後,建議要找工作的親們,去網上找些大公司面試題做一下,畢竟他們考得較為綜合較深,在學習知識的時候,也刷一下題,另外也一定要做一下,因為很容易眼高手低,一開始的函數,我優化了幾遍才能正常使用。 這就是一道PHP遞迴創建多層次目錄面試題目,以後小編會再找些有意思的面試題跟大家分享。

總結:以上就是這篇文章的全部內容,希望能對大家的學習有所幫助。

相關推薦:PHP中each及list函數的使

PHP地理位置搜尋併計算距離

用技巧############PHP取得目錄下檔案######

以上是PHP使用遞歸函數建立多層目錄的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板