2015-11-27 29 views
0

我正在Laravel 5中使用刀片作爲模板的電機。我傳遞一個數組從控制器到視圖,我注意到,當我上循環使用的foreach clausule和數組是空的提示錯誤,正是這一點:與空陣列foreach的錯誤

Invalid argument supplied for foreach() 

我有在同樣的錯誤控制器和I修復temporaly製作:

if(count($student)!=0) 

我說temporaly,因爲我不認爲這是做到這一點的最好辦法。 控制器中的代碼是:

foreach($students as $student){ 
     if(count($student->contracts)!=0) 
      foreach($student->contracts as $contract){ 
       //something 
      }//end foreach 
    }//end foreach 

我陣列上取得了一些操作,然後我將它們發送到視圖:

return view('myview')->with(['students'=>$students]); 

陣列被傳遞到視圖中正確。我說的是foreach,因爲之前我的數據庫中有很多寄存器,它運行良好,但是現在我有一些沒有合同的學生,然後我得到了這個錯誤。但是,在我看來,我有同樣的錯誤。所以,這是正常的?我怎樣才能以更好的方式修復它?爲什麼當數組是空的時候foreach clausule給出了這個錯誤?

+0

什麼是'$ student'的價值? – BenM

+0

是'模型'用戶的一個對象,我檢查了它,並確切地說是2名學生,當我把沒有錯誤的if語句。事情是$學生是一個數組,並且在他的內部,我有另一個$合同數組 –

+0

它不能同時是'User'對象和數組。它是一個包含兩個'User'對象的數組,還是其他的? – BenM

回答

1

通過它試試這個

$people = [ 
     "Person A", "Person B", "Person C" 
]; 
return view ('pages', compact('people')); 

和循環是這樣的:

@if (count($people)) 
    <h3>People:</h3> 
    <ul> 
     @foreach($people as $person) 
      <li>{{ $person }}</li> 
     @endforeach 
    </ul> 
@endif 
+0

當然,我也是這樣做的!謝謝;) –

+0

使用壓縮器('@')並不是真正的處理事情的好方法。第一個'if'語句永遠不會拋出錯誤,並且如果您總是檢查count是否大於0,那麼'foreach'循環中也不會有錯誤。 – Qirel

2

PHP不會返回警告如果包含在$student->contracts數組爲空。它將返回它,如果它是一個無效類型(即不是一個數組)。

而不是檢查的$student->contractscount(),你最好檢查是否它實際上是一個數組,如下所示:

foreach($students as $student) 
{ 
    // Make sure that $student->contracts is actually an array (to bypass errors): 
    if(is_array($student->contracts)) 
    { 
     // Now loop through it: 
     foreach($student->contracts as $contract) 
     { 
      // Do something here 
     } 
    } 
} 
+0

謝謝你!這工作得很好。但我仍然不得不在視圖中加入if語句。我認爲那是別無選擇的事情。謝謝 –