Laravel Collections:Shift Value *和* Key?

时间:2017-08-07 18:40:45

标签: php laravel collections

laravel集合方法(或PHP数组方法)是否有办法移出集合的第一个键/值对?

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

$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有更优雅/紧凑的东西那么/想知道。

3 个答案:

答案 0 :(得分:3)

Splice可以为您服务:

$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

答案 1 :(得分:2)

获取密钥的一种方法是使用

$collectionOfKeys = $collection->keys();

要获得第一把钥匙,你可以这样做:

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

但是,由于keys()将返回一个新集合,因此无法将值从原始集合中移出一行,但您可以使用忘记$ key或只是移动原始集合之后。

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

答案 2 :(得分: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"

抓住第一把钥匙

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

结果

"key1"