日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP递归创建多级目录(一道面试题的解题过程)

發布時間:2024/1/17 php 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()函數不會創建子目錄時找不到父目錄發出警告。

進入遞歸深處后,確認最深處的根目錄存在后,從根目錄向下依次創建目錄。


?

最后,建議要找工作的親們,去網上找些大公司面試題做一下,畢竟他們考得較為綜合較深,在學習知識的時候,也刷一下題,另外也一定要做一下,因為很容易眼高手低,一開始的函數,我優化了好幾遍才能正常使用。

以后我也會再找些有意思的面試題跟大家分享。

如果您覺得本博文對您有幫助,您可以推薦或關注我,如果您有什么問題,可以在下方留言討論,謝謝。

轉載于:https://www.cnblogs.com/zhenbianshu/p/4938975.html

總結

以上是生活随笔為你收集整理的PHP递归创建多级目录(一道面试题的解题过程)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。