php判斷一個數組為空白if(!array())好,還是if(empty(array()))?
回複內容:
php判斷一個數組為空白if(!array())好,還是if(empty(array()))?
首先習慣性地,RTFM
沒有好不好,只有合適不合適
!
和empty()
行為有什麼區別?
他們的行為有3個差異
空SimpleXML (經過實驗,發現這是文檔問題,php5.1後,兩者行為是一致的)
未定義的變數 (!$undefined
會產生error,empty($undefined)
則返回true) 和isset
類似,這個特性對於訪問複雜結構的數組或對象成員的時候特別友好(empty($arr['userModel']->userFriends)
)
php5.5之前,empty
只接受變數,不接受運算式(比如函數的返回結果empty(getSomething())
)
評論裡也有人說了,因為empty是語言結構,並沒有函數調用的巨大開銷,所以兩者的效能的差異不會太大,另外現代PHP對於這種小的開銷也已經最佳化地很好了,所以這裡不怎麼需要考慮效能。結合上面的分析來說,empty
是優於!
的,除非你的php版本比較老,而又需要對錶達式直接判斷,不希望多加一個變數
但是,如果你並不知道你手裡的東西是不是數組,建議參考 @dreamans 的答案,考慮$arr
並非數組的情境做合適的處理。
因為is_array
並不具有empty
的耐受未定義的特性,我推薦這種寫法empty($arr) && is_array($arr)
能夠嚴謹地支援各種情境
if(empty($undefined) && is_array($undefined));//未定義變數if(empty($arr['userModel']->userFriends) && is_array($arr['userModel']->userFriends));//(潛在)未定義成員//或者反向情境,判斷有內容數組,結合運算式的能力if(!empty($things = getSomething()) && is_array($things));
當然,更好的風格是用typehinting代替is_array
,一定是array且一定定義過,情況好得多
關於官方手冊中empty行為描述的不完整,已經補充評論了,各位有空幫忙upvote
if (count($arr)) { // 數組不為空白}
效果完全一樣
寫代碼要嚴謹:
if(is_array($arr) && !$arr) { do something}
答案寫到評論裡面了。