本篇文章主要介紹PHP使用遞迴函數建立多層目錄,有興趣的朋友參考下,希望對大家有幫助。
具體如下:
function Directory($dir){ if(is_dir($dir) || @mkdir($dir,0777)){ //查看目录是否已经存在或尝试创建,加一个@抑制符号是因为第一次创建失败,会报一个“父目录不存在”的警告。 echo $dir."创建成功<br>"; //输出创建成功的目录 }else{ $dirArr=explode('/',$dir); //当子目录没创建成功时,试图创建父目录,用explode()函数以'/'分隔符切割成一个数组 array_pop($dirArr); //将数组中的最后一项(即子目录)弹出来, $newDir=implode('/',$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中文網其他相關文章!

Laravel使用其直觀的閃存方法簡化了處理臨時會話數據。這非常適合在您的應用程序中顯示簡短的消息,警報或通知。 默認情況下,數據僅針對後續請求: $請求 -

PHP客戶端URL(curl)擴展是開發人員的強大工具,可以與遠程服務器和REST API無縫交互。通過利用Libcurl(備受尊敬的多協議文件傳輸庫),PHP curl促進了有效的執行

PHP日誌記錄對於監視和調試Web應用程序以及捕獲關鍵事件,錯誤和運行時行為至關重要。它為系統性能提供了寶貴的見解,有助於識別問題並支持更快的故障排除

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显著减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想為客戶最緊迫的問題提供實時的即時解決方案? 實時聊天使您可以與客戶進行實時對話,並立即解決他們的問題。它允許您為您的自定義提供更快的服務

文章討論了PHP 5.3中介紹的PHP中的晚期靜態結合(LSB),允許靜態方法的運行時間分辨率調用以更靈活的繼承。 LSB的實用應用和潛在的觸摸


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SublimeText3漢化版
中文版,非常好用

Dreamweaver Mac版
視覺化網頁開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。