PHP遞迴建立多級目錄(一道面試題的解題過程)

2021-09-07 03:31:06 字數 1296 閱讀 7717

今天看到一道面試題,要寫出乙個可以建立多級目錄的函式:

我的第乙個感覺就是用遞迴建立,具體思路如下:

function directory($dir

)else //

再次試圖建立子目錄,成功輸出目錄名}}

directory("a/b/c/d/e/f");

輸出結果如圖:

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

string dirname ( string $path )

給出乙個包含有指向乙個檔案的全路徑的字串,本函式返回去掉檔名後的目錄名。 

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

可以稍稍地優化一下:

function directory($dir

)else}}

效果一樣。

之後我在在網上搜一下答案,找到乙個異常精闢的:

function  directory( $dir

)

現在來解釋一下整個函式:

先介紹一下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建立多級目錄

1.使用到函式 1.1新建目錄的函式 bool mkdir string pathname int mode 0777 bool recursive false resource context 引數說明 pathname 目錄的路徑 mode 預設的mode是0777,意味著最大的可能訪問權,mo...

一道遞迴問題

題目大意是 給定乙個字串a,然後給定多個單詞,然後根據給定的單詞在字串中插入空格,求插入空格最少的組合。例如給定字串ilikeeverything,給定單詞i like every thing likeeverything。輸出為i likeeverything。include include in...

php利用mkdir建立多級目錄

先介紹一下 mkdir 這個函式 mkdir path,0777,true 第乙個引數 必須,代表要建立的多級目錄的路徑 第二個引數 設定目錄的許可權,預設是 0777,意味著最大可能的訪問權 第三個引數 true表示允許建立多級目錄。舉例 支援建立中文目錄 header content type ...