《PHP應(yīng)用:PHP遞歸創(chuàng)建多級(jí)目錄》要點(diǎn):
本文介紹了PHP應(yīng)用:PHP遞歸創(chuàng)建多級(jí)目錄,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
PHP應(yīng)用我的第一個(gè)感覺(jué)便是用遞歸創(chuàng)建,具體思路如下:
PHP應(yīng)用
function Directory($dir){
if(is_dir($dir) || @mkdir($dir,0777)){ //查看目錄是否已經(jīng)存在或嘗試創(chuàng)建,加一個(gè)@抑制符號(hào)是因?yàn)榈谝淮蝿?chuàng)建失敗,會(huì)報(bào)一個(gè)“父目錄不存在”的警告.
echo $dir."創(chuàng)建成功<br>"; //輸出創(chuàng)建成功的目錄
}else{
$dirArr=explode('/',$dir); //當(dāng)子目錄沒(méi)創(chuàng)建成功時(shí),試圖創(chuàng)建父目錄,用explode()函數(shù)以'/'分隔符切割成一個(gè)數(shù)組
array_pop($dirArr); //將數(shù)組中的最后一項(xiàng)(即子目錄)彈出來(lái),
$newDir=implode('/',$dirArr); //重新組合成一個(gè)文件夾字符串
Directory($newDir); //試圖創(chuàng)建父目錄
if(@mkdir($dir,0777)){
echo $dir."創(chuàng)建成功<br>";
} //再次試圖創(chuàng)建子目錄,成功輸出目錄名
}
}
Directory("A/B/C/D/E/F");
PHP應(yīng)用輸出結(jié)果如圖:
PHP應(yīng)用?
PHP應(yīng)用但是可以看得出來(lái),寫得也太麻煩了,在手冊(cè)里翻看文件函數(shù),看到一個(gè)dirname()函數(shù),其原型如下:
PHP應(yīng)用string dirname ( string $path )
PHP應(yīng)用給出一個(gè)包括有指向一個(gè)文件的全路徑的字符串,本函數(shù)返回去掉文件名后的目錄名.
PHP應(yīng)用在 Windows 中,斜線(/)和反斜線(\)都可以用作目錄分隔符.在其它環(huán)境下是斜線(/).
PHP應(yīng)用可以稍稍地優(yōu)化一下:
PHP應(yīng)用
function Directory($dir){
if(is_dir($dir) || @mkdir($dir,0777)){
echo $dir."創(chuàng)建成功<br>";
}else{
Directory(dirname($dir));
if(@mkdir($dir,0777)){
echo $dir."創(chuàng)建成功<br>";
}
}
}
PHP應(yīng)用效果一樣.
之后我在在網(wǎng)上搜一下答案,找到一個(gè)異常精辟的:
PHP應(yīng)用
function Directory( $dir ){
return is_dir ( $dir ) or Directory(dirname( $dir )) and mkdir ( $dir , 0777);
}
PHP應(yīng)用現(xiàn)在來(lái)解釋一下整個(gè)函數(shù):
PHP應(yīng)用先介紹一下PHP中邏輯運(yùn)算符的優(yōu)先級(jí)順序:&& > || > and > or,即符號(hào)型>字母型,AND型>OR型,所以函數(shù)體可以看成:
PHP應(yīng)用is_dir ( $dir )? or? (Directory(dirname( $dir ))? and?? mkdir ( $dir , 0777));
PHP應(yīng)用先判斷目標(biāo)目錄是否存在,若存在,依or的短路特性,后面的整體被短路,跳過(guò)執(zhí)行;若目標(biāo)目錄不存在,則執(zhí)行后面的函數(shù)體:
PHP應(yīng)用Directory(dirname( $dir ))? and?? mkdir ( $dir , 0777)
PHP應(yīng)用我考慮了一下先進(jìn)行遞歸的用意:先執(zhí)行遞歸,意在確認(rèn)其父目錄(dirname($dir))都已經(jīng)創(chuàng)建完畢,使后面的mkdir()函數(shù)不會(huì)創(chuàng)建子目錄時(shí)找不到父目錄發(fā)出警告.
PHP應(yīng)用進(jìn)入遞歸深處后,確認(rèn)最深處的根目錄存在后,從根目錄向下依次創(chuàng)建目錄.
PHP應(yīng)用最后,建議要找工作的親們,去網(wǎng)上找些大公司面試題做一下,畢竟他們考得較為綜合較深,在學(xué)習(xí)知識(shí)的時(shí)候,也刷一下題,另外也必定要做一下,因?yàn)楹苋菀籽鄹呤值?一開(kāi)始的函數(shù),我優(yōu)化了好幾遍才能正常使用.
PHP應(yīng)用這便是一道PHP遞歸創(chuàng)建多級(jí)目錄面試題目,以后小編會(huì)再找些有意思的面試題跟大家分享.
歡迎參與《PHP應(yīng)用:PHP遞歸創(chuàng)建多級(jí)目錄》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/8449.html