2015-09-10 51 views
0

有沒有像only收藏的方法?是否有任何實用工具可以獲取Laravel Collection的子集?

$col=collection(['foo'=>'x','bar'=>'z',…]); 
$subcol=$col->only(['foo','bar']); // returns ['foo'=>'x','bar'=>'z'] 

我知道,我可以使用下面的函數來實現這一點,但我希望有更好的辦法:

function array_only($array, $keys) 
{ 
    return Arr::only($array, $keys); 
} 

事實上Laravel有一個輔助函數名稱array_only。但是我想知道爲什麼Arr類方法沒有被添加到集合中。

+0

之間找到幾種替代方法'Eloquent \ Collection'有一個'only'方法,因此您只能過濾查詢結果,但它不適用於簡單數組。所以你可以做'MyModel :: get() - > only([2,3]);' – Iamzozo

+0

我知道不同的情況出現,但是如果你可以從數據庫中過濾返回的子集,那麼在代碼中排序它就是隻增加開銷。 – Gokigooooks

回答

-1

Laravel Collection不支持按鍵過濾。因此,轉換爲陣列並使用array_filter()代替。

$col = collect(['foo'=>'x', 'bar'=>'z', ...]); 

$keysToFilter = ['foo', 'bar']; 
$subcol = array_filter($col->toArray(), function($key) use ($keysToFilter) { 
    return in_array($key, $keysToFilter); 
}, ARRAY_FILTER_USE_KEY); 
相關問題