《PHP應用:PHP遞歸創建多級目錄》要點:
本文介紹了PHP應用:PHP遞歸創建多級目錄,希望對您有用。如果有疑問,可以聯系我們。
PHP應用我的第一個感覺便是用遞歸創建,具體思路如下:
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");
PHP應用輸出結果如圖:
PHP應用?
PHP應用但是可以看得出來,寫得也太麻煩了,在手冊里翻看文件函數,看到一個dirname()函數,其原型如下:
PHP應用string dirname ( string $path )
PHP應用給出一個包括有指向一個文件的全路徑的字符串,本函數返回去掉文件名后的目錄名.
PHP應用在 Windows 中,斜線(/)和反斜線(\)都可以用作目錄分隔符.在其它環境下是斜線(/).
PHP應用可以稍稍地優化一下:
PHP應用
function Directory($dir){
if(is_dir($dir) || @mkdir($dir,0777)){
echo $dir."創建成功<br>";
}else{
Directory(dirname($dir));
if(@mkdir($dir,0777)){
echo $dir."創建成功<br>";
}
}
}
PHP應用效果一樣.
之后我在在網上搜一下答案,找到一個異常精辟的:
PHP應用
function Directory( $dir ){
return is_dir ( $dir ) or Directory(dirname( $dir )) and mkdir ( $dir , 0777);
}
PHP應用現在來解釋一下整個函數:
PHP應用先介紹一下PHP中邏輯運算符的優先級順序:&& > || > and > or,即符號型>字母型,AND型>OR型,所以函數體可以看成:
PHP應用is_dir ( $dir )? or? (Directory(dirname( $dir ))? and?? mkdir ( $dir , 0777));
PHP應用先判斷目標目錄是否存在,若存在,依or的短路特性,后面的整體被短路,跳過執行;若目標目錄不存在,則執行后面的函數體:
PHP應用Directory(dirname( $dir ))? and?? mkdir ( $dir , 0777)
PHP應用我考慮了一下先進行遞歸的用意:先執行遞歸,意在確認其父目錄(dirname($dir))都已經創建完畢,使后面的mkdir()函數不會創建子目錄時找不到父目錄發出警告.
PHP應用進入遞歸深處后,確認最深處的根目錄存在后,從根目錄向下依次創建目錄.
PHP應用最后,建議要找工作的親們,去網上找些大公司面試題做一下,畢竟他們考得較為綜合較深,在學習知識的時候,也刷一下題,另外也必定要做一下,因為很容易眼高手低,一開始的函數,我優化了好幾遍才能正常使用.
PHP應用這便是一道PHP遞歸創建多級目錄面試題目,以后小編會再找些有意思的面試題跟大家分享.
歡迎參與《PHP應用:PHP遞歸創建多級目錄》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/8449.html