我在使用Blade作为模板电机的Laravel 5中工作。我将一个数组从控制器传递给视图,我注意到当我使用 foreach clausule循环它并且数组为空时它会出错,正是这样:
Invalid argument supplied for foreach()
我在控制器中遇到了同样的错误,我暂时修复它:
if(count($student)!=0)
我说临时因为我不认为这是最好的方法。 控制器中的代码是:
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 :(得分:2)
如果$student->contracts
中包含的数组为空,PHP将不会返回该警告。如果它是无效类型(即不是数组),它将返回它。
不是检查count()
的{{1}},而是检查它是否实际上是一个数组,如下所示:
$student->contracts
答案 1 :(得分: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