2017-07-19 31 views
2

我正在使用laravel框架項目並面臨以下問題。爲什麼Laravel返回數組無法使用empty()但是使用count()

查詢:

$query = DB::table('test'); 
$query->select('*'); 
$query->where('testId = 1'); 
$result = $query->get(); 
print_r($result); 

輸出:

Illuminate\Support\Collection Object 
(
    [items:protected] => Array 
     (
     ) 

) 

現在我檢查$result有記錄與否。

if(empty($result)) 
{ 
    echo "Not Empty check with empty()"; 
} 

if(count($result) == 0) 
{ 
    echo "Not Empty check with count()"; 
} 

輸出:

Not Empty check with count() 

問:

我用empty()在所有的項目,但在laravel框架項目我無法知道,爲什麼這個$result進入count()狀態,不進入empty()

注:

我已閱讀,計數()是緩慢的比較空()也空()檢查變量被設置或不那麼我在所有返回數組或對象數組使用空() 。

請幫助別人。

在此先感謝!

+0

您的查詢返回的結果,而不是空所以計數總是大於零,用!empty($ result)條件檢查 –

+0

但是在上面的情況下,爲什麼它要count()而不是在empty()中。這個數組不會返回數據庫中的值,所以empty()會給出true,這是不正確的。 @RAUSHANKUMAR – RJParikh

+0

作爲第一個()查詢返回一個集合對象,所以更好地使用isEmpty()函數 –

回答

2

隨着->get()方法,你會得到集合的實例。

當您對從get方法獲得的數據應用empty()時,即使沒有結果,也會一直返回Illuminate\Support\Collection的實例。

當你與->get()方法獲取數據,則不能使用下列簡單,

if(empty($data)){ 

} 

if(!data){ 

} 

if($data){ 

} 

而不是上面你可以簡單地使用,

isEmpty($data) or 

count($data) or 

$data->count() 
+1

感謝您的建議! – RJParikh

+1

我想你應該沒有'first()'的問題,因爲如果沒有找到數據,它將返回** null **。我不知道爲什麼 –

+0

哦...我檢查了代碼與'get()'# – RJParikh

1

php docs

確定變量是否被認爲是空的。如果變量不存在或者其值等於FALSE,則該變量被認爲是空的。如果變量不存在,empty()不會生成警告。

laravel集合類實現了Countable interface,它允許您使用count函數。如果您檢查收集課程,您會看到count方法返回內部項目的計數。

empty函數沒有接口,所以在這種情況下它只會檢查變量是否未設置或等於false,如果檢查對象時顯然不適用。

+0

好了... ...感謝您的幫助:) – RJParikh

0

條件試試這個:

if(empty($result->toArray())) 
{ 
    echo "Not Empty check with empty()"; 
} 

if(count($result) == 0) 
{ 
    echo "Not Empty check with count()"; 
} 
相關問題