今天看到一道面試題,要寫出乙個可以建立多級目錄的函式:
我的第乙個感覺就是用遞迴建立,具體思路如下:
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 ...