CFr*_*ree 7 php laravel eloquent laravel-5.2
我需要检查名称数组中的名称,但无法将数组而不是集合传递给in_array()方法。
我的刀片代码看起来像这样
@foreach($ecn->areas as $area)
{{ $area->area }}:<br>
<ul>
@foreach($area->people as $person)
@if(in_array($person, $ecn->signatures->name ))
<li><del>{{ $person }}</del></li>
@else
<li>{{ $person }}</li>
@endif
@endforeach
</ul>
@endforeach
Run Code Online (Sandbox Code Playgroud)
我知道我的问题在于尝试访问签名列表的方式。
@if(in_array($person, $ecn->signatures->name ))
Run Code Online (Sandbox Code Playgroud)
我可以在页面的另一部分访问它们
@foreach($ecn->signatures as $signature)
{{ $signature->name }}<br>
@endforeach
Run Code Online (Sandbox Code Playgroud)
一切都很好。
在这种情况下,如何访问签名列表并将其作为数组传递?
Has*_*imi 10
如果要in_array()为Laravel集合使用版本,则可以使用:
$collection->contains($needle)
Run Code Online (Sandbox Code Playgroud)
就像in_array。
例如,如果$needle是整数,id则不要忘了先摘,就像这样:
$collection->pluck('id')->contains($needle)
Run Code Online (Sandbox Code Playgroud)
您可以在签名集合上使用listsor pluck方法来获取所有名称的新集合。从那里,您可以使用contains()集合上的方法,也可以使用该all()方法将集合变成数组并in_array直接使用。
我建议在foreach循环之外执行此操作,因此您不必每次迭代都生成此新的集合和数组。
数组:
// controller
$names = $ecn->signatures->lists('name')->all();
// blade
@if(in_array($person, $names))
Run Code Online (Sandbox Code Playgroud)
采集:
// controller
$names = $ecn->signatures->lists('name');
// blade
@if($names->contains($person))
Run Code Online (Sandbox Code Playgroud)
您还可以将其contains()与闭包一起使用,这将使您无需创建中间集合就可以摆脱困境,但阅读起来会有些困难:
包含闭包:
// blade
@if($ecn->signatures->contains(function ($key, $value) use ($person) {
return $value->name == $person;
}))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4264 次 |
| 最近记录: |