2017-08-07 36 views
2

laravel收集方法(或者PHP數組方法,對於這個問題)是否有辦法將集合的第一個鍵/值對移走?Laravel作品集:Shift Value *和* Key?

也就是說,如果我有以下的小程序

$collection = collect(['key1'=>'value1','key2'=>'value2']);   

var_dump(
    $collection->first() 
); 

var_dump(
    $collection->shift() 
); 

我可以shift()value1離集合的開始,或抓住它不通過first()刪除它。我想要的是用一行代碼來切換或獲取第一個值的(即key1)。我知道我可以做這樣的事情

$result = (function($c){ 
    foreach($c as $key=>$value) 
    { 
     return $key; 
    } 
})($collection); 

,但我希望,那/想知道,如果Laravel有一些東西更優雅/緊湊。搶鑰匙

+0

你不關心在所有的值? – Devon

+0

@Devon我關心他們 - 但是如果沒有辦法同時獲取價值的一行附加代碼和他們的關鍵。 –

回答

1

抓一個元素(拳頭或上次):

第一個

$collection->take(1); 

結果

=> Illuminate\Support\Collection {#926 
    all: [ 
     "key1" => "value1", 
    ], 
    } 

最後一個

$collection->take(-1); 

結果

=> Illuminate\Support\Collection {#924 
    all: [ 
     "key2" => "value2", 
    ], 
    } 

抓住第一密鑰我

$collection->take(1)->keys()->first(); 

結果

"key1" 

抓住第一密鑰II

key($collection->take(1)->toArray()); 

結果

"key1" 
2

一種方法是使用

$collectionOfKeys = $collection->keys(); 

爲了得到第一個鍵,你可以這樣做:

$key = $collection->keys()->first(); 

然而,由於鍵()將返回一個新的集合,它不是可能會將原始集合中的值從一行中移出,但您可以使用$ key來忘記,或者稍後移動原始集合。

$collection->forget($key); 
// or $collection->shift(); 
+0

這就是我會做的。它乾淨,不言自明,使用專用的Laravel方法。 – lesssugar

+0

@lesssugar因爲你需要第一個元素,所以你會要求Laravel構建一個可能包含數百萬個元素的密鑰數組?爲什麼? – Axalix

+0

我同意splice()是處理這個問題的最有效方式,當Jean發佈他的答案時,我正在舉一個例子。這種方式很有效,但是在大量收集時效率不高。 – Devon

3

接頭可以爲你工作:

$collection = collect(['key1'=>'value1','key2'=>'value2']); 

$chunked = $collection->splice(0, 1); 

print_r($chunked); 
//Array([key1] => value1) 

print_r($collection->all()); 
//Array ([key2] => value2) 

參見:https://laravel.com/docs/5.4/collections#method-splice

+0

擊敗我,只是更新我的答案。 – Devon

相關問題