2016-06-29 46 views
3

我需要檢查名稱數組中的名稱,但我無法將數組而不是集合傳遞給in_array()方法。在集合上使用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 

我知道我的問題是在即時通訊的方式試圖訪問的簽名列表。

@if(in_array($person, $ecn->signatures->name)) 

我可以訪問這些頁面的另一部分做這個

@foreach($ecn->signatures as $signature) 
{{ $signature->name }}<br> 
@endforeach 

,一切都很好。

在這種情況下,我如何訪問和傳遞簽名列表作爲數組?

回答

4

您可以在簽名集合上使用listspluck方法來獲取所有名稱的新集合。然後,您可以使用all()將集合轉換爲數組。

我會建議在foreach循環之外做這件事,所以你不會在每次迭代中生成這個新的集合和數組。

生成名稱的列表:

使用刀片內部列表:

@if(in_array($person, $names)) 
+0

工作。謝謝。 – CFree

1

按Laravel文檔

get方法返回結果,其中的數組每個結果都是PHP StdClass對象的一個​​實例。

所以你必須將你的stdClass對象轉換爲控制器本身的數組。

foreach ($ecn->signatures as $signature) 
    $nameArray[] = $signature->name; 

,然後你可以在刀片模板中使用in_array

@if(in_array($person, $nameArray)) 
0

如果你想使用in_array()版本Laravel集合,然後你可以使用:

$collection->contains($needle) 

它炒菜就像in_array