2017-08-07 57 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

相关问题