欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP遞歸創(chuàng)建多級(jí)目錄

 更新時(shí)間:2015年11月05日 14:18:03   投稿:lijiao  
本文主要介紹了PHP遞歸創(chuàng)建多級(jí)目錄,這是一道經(jīng)典的php程序員面試題,分享了解題過(guò)程和思路,需要的朋友可以參考一下

我的第一個(gè)感覺(jué)就是用遞歸創(chuà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");

輸出結(jié)果如圖:

 

但是可以看得出來(lái),寫(xiě)得也太麻煩了,在手冊(cè)里翻看文件函數(shù),看到一個(gè)dirname()函數(shù),其原型如下:

string dirname ( string $path )

給出一個(gè)包含有指向一個(gè)文件的全路徑的字符串,本函數(shù)返回去掉文件名后的目錄名。

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

可以稍稍地優(yōu)化一下:

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>";

        }

    }

}

效果一樣。
之后我在在網(wǎng)上搜一下答案,找到一個(gè)異常精辟的

function Directory( $dir ){  

   return  is_dir ( $dir ) or Directory(dirname( $dir )) and  mkdir ( $dir , 0777);

}

現(xiàn)在來(lái)解釋一下整個(gè)函數(shù):

先介紹一下PHP中邏輯運(yùn)算符的優(yōu)先級(jí)順序:&& > || > and > or,即符號(hào)型>字母型,AND型>OR型,所以函數(shù)體可以看成:

is_dir ( $dir )  or  (Directory(dirname( $dir ))  and   mkdir ( $dir , 0777));

先判斷目標(biāo)目錄是否存在,若存在,依or的短路特性,后面的整體被短路,跳過(guò)執(zhí)行;若目標(biāo)目錄不存在,則執(zhí)行后面的函數(shù)體:

Directory(dirname( $dir ))  and   mkdir ( $dir , 0777)

我考慮了一下先進(jìn)行遞歸的用意:先執(zhí)行遞歸,意在確認(rèn)其父目錄(dirname($dir))都已經(jīng)創(chuàng)建完畢,使后面的mkdir()函數(shù)不會(huì)創(chuàng)建子目錄時(shí)找不到父目錄發(fā)出警告。

進(jìn)入遞歸深處后,確認(rèn)最深處的根目錄存在后,從根目錄向下依次創(chuàng)建目錄。

最后,建議要找工作的親們,去網(wǎng)上找些大公司面試題做一下,畢竟他們考得較為綜合較深,在學(xué)習(xí)知識(shí)的時(shí)候,也刷一下題,另外也一定要做一下,因?yàn)楹苋菀籽鄹呤值?,一開(kāi)始的函數(shù),我優(yōu)化了好幾遍才能正常使用。

這就是一道PHP遞歸創(chuàng)建多級(jí)目錄面試題目,以后小編會(huì)再找些有意思的面試題跟大家分享。

相關(guān)文章

最新評(píng)論