PHP遞歸創(chuàng)建多級目錄,php遞歸
Jun 13, 2016 am 08:51 AMPHP遞歸創(chuàng)建多級目錄,php遞歸
我的第一個(gè)感覺就是用遞歸創(chuàng)建,具體思路如下:
function Directory($dir){ if(is_dir($dir) || @mkdir($dir,0777)){ //查看目錄是否已經(jīng)存在或嘗試創(chuàng)建,加一個(gè)@抑制符號是因?yàn)榈谝淮蝿?chuàng)建失敗,會報(bào)一個(gè)“父目錄不存在”的警告。 echo $dir."創(chuàng)建成功<br>"; //輸出創(chuàng)建成功的目錄 }else{ $dirArr=explode('/',$dir); //當(dāng)子目錄沒創(chuàng)建成功時(shí),試圖創(chuàng)建父目錄,用explode()函數(shù)以'/'分隔符切割成一個(gè)數(shù)組 array_pop($dirArr); //將數(shù)組中的最后一項(xiàng)(即子目錄)彈出來, $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é)果如圖:
但是可以看得出來,寫得也太麻煩了,在手冊里翻看文件函數(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)在來解釋一下整個(gè)函數(shù):
先介紹一下PHP中邏輯運(yùn)算符的優(yōu)先級順序:&& > || > and > or,即符號型>字母型,AND型>OR型,所以函數(shù)體可以看成:
is_dir ( $dir )? or? (Directory(dirname( $dir ))? and?? mkdir ( $dir , 0777));
先判斷目標(biāo)目錄是否存在,若存在,依or的短路特性,后面的整體被短路,跳過執(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ù)不會創(chuàng)建子目錄時(shí)找不到父目錄發(fā)出警告。
進(jìn)入遞歸深處后,確認(rèn)最深處的根目錄存在后,從根目錄向下依次創(chuàng)建目錄。
最后,建議要找工作的親們,去網(wǎng)上找些大公司面試題做一下,畢竟他們考得較為綜合較深,在學(xué)習(xí)知識的時(shí)候,也刷一下題,另外也一定要做一下,因?yàn)楹苋菀籽鄹呤值?,一開始的函數(shù),我優(yōu)化了好幾遍才能正常使用。
這就是一道PHP遞歸創(chuàng)建多級目錄面試題目,以后小編會再找些有意思的面試題跟大家分享。

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

掌握PHP常用運(yùn)算符能應(yīng)對多數(shù)開發(fā)場景,主要包括:1.算術(shù)運(yùn)算符( 、-、、/、%)用於數(shù)學(xué)計(jì)算,支持變量動態(tài)運(yùn)算,但需注意自動類型轉(zhuǎn)換可能引發(fā)的問題;2.比較運(yùn)算符(==、===、!=、>、

TostartwithPHP,firstsetupalocalserverenvironmentusingtoolslikeXAMPPorMAMP,thenwriteabasicPHPscriptusingechotodisplaytext,andfinallyintegratePHPwithHTMLfordynamiccontent.1.ChooseatoollikeXAMPPforWindowsorMAMPforMactoinstallApache,MySQL,andPHP.2.PlaceP

PHP有三種常見的註釋方式,分別是單行註釋、多行註釋和文檔塊註釋。 1.單行註釋使用//或#,適合簡短說明,可置於代碼行末或單獨(dú)一行;2.多行註釋以/開頭並以/結(jié)尾,適合詳細(xì)說明如函數(shù)功能或版本記錄;3.文檔塊註釋以/**開頭,結(jié)合@param、@return等標(biāo)籤,能被IDE和工具識別,用於生成代碼提示和文檔。此外,建議為函數(shù)和類編寫註釋,尤其公共方法;在復(fù)雜邏輯處添加解釋性註釋;避免無意義註釋;不提交被註釋掉的調(diào)試代碼。掌握這些註釋方式和使用建議,有助於提升代碼可讀性和維護(hù)效率。

PHP中添加註釋有三種方式://、#和//,其中//最常用。註釋能提升代碼可讀性和維護(hù)性,應(yīng)解釋“為什麼”而非“做了什麼”,同時(shí)需保持更新。函數(shù)和類應(yīng)註明功能及輸入輸出參數(shù),內(nèi)聯(lián)註釋可用於解釋複雜邏輯。合理使用註釋有助於團(tuán)隊(duì)協(xié)作與後期調(diào)試,避免過多或過時(shí)的註釋。

安裝PHP常見問題有四種,分別是:1.PHP無法啟動或報(bào)錯(cuò),應(yīng)檢查php.ini配置錯(cuò)誤並用php-t驗(yàn)證;2.安裝擴(kuò)展失敗時(shí)確認(rèn)底層依賴是否安裝完整;3.Web服務(wù)器無法解析PHP文件需檢查PHP-FPM是否啟用並與服務(wù)器配置匹配;4.多版本衝突可通過whichphp和php-v查看當(dāng)前使用版本並調(diào)整環(huán)境變量或切換工具。遇到問題應(yīng)逐步排查配置和日誌以定位原因。

註釋應(yīng)說明“為什麼”而非“做了什麼”,如解釋業(yè)務(wù)原因而非重複代碼操作;2.在復(fù)雜邏輯前加總覽性註釋,簡要說明流程步驟,幫助建立整體印象;3.給“奇怪”代碼加註釋,解釋非常規(guī)寫法的意圖,避免誤解為bug;4.註釋格式建議簡潔為主,單行用//,函數(shù)/類用/*.../,保持統(tǒng)一風(fēng)格;5.避免註釋與代碼不同步、註釋過長或註釋掉代碼未刪除等問題,確保註釋真正提升代碼可讀性和維護(hù)性。

這篇文章回答了新手學(xué)習(xí)PHP的幾個(gè)關(guān)鍵問題。一,快速上手基礎(chǔ)語法的方法是通過實(shí)踐變量、條件判斷和循環(huán)等基本結(jié)構(gòu),例如使用$定義變量、echo輸出內(nèi)容、if判斷條件;二,PHP與HTML結(jié)合使用的方式是將PHP代碼嵌入HTML中,用包裹,並註意在支持PHP的服務(wù)器環(huán)境下運(yùn)行;三,處理表單提交和數(shù)據(jù)庫連接的流程包括:前端提交表單、PHP接收數(shù)據(jù)、驗(yàn)證數(shù)據(jù)、使用mysqli或PDO等方式連接數(shù)據(jù)庫並執(zhí)行插入操作,同時(shí)推薦使用ORM工具提高安全性與便捷性。文章強(qiáng)調(diào)學(xué)習(xí)PHP要注重動手實(shí)踐,逐步積累經(jīng)驗(yàn)。

PHP字符串拼接使用點(diǎn)號.操作符,如$a="Hello".$"World";雙引號中可直接嵌入變量,如echo"Hello,$name";拼接大量內(nèi)容時(shí)建議初始化空字符串後用.=追加,或用數(shù)組 implode()優(yōu)化性能;常見錯(cuò)誤包括單引號未解析變量、漏加標(biāo)點(diǎn)符號、變量未賦值等。需注意1.點(diǎn)號用於連接任意字符串2.雙引號支持變量替換但不解析複雜表達(dá)式3.循環(huán)拼接推薦先初始化再逐步添加4.避免混用引號導(dǎo)致變量未解析。
