Laravel集合:如何移除值和键?

4

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 有更加优雅紧凑的解决方案。


你完全不关心这些值吗? - Devon
@Devon 我确实关心它们,但如果没有办法同时获取这两个值,只需要再加一行代码就可以使用该键了。 - Alana Storm
3个回答

10

抓取元素(第一个或最后一个):

第一个

$collection->take(1);

结果

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

最后一条

$collection->take(-1);

结果

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

抓取第一个关键字 I
$collection->take(1)->keys()->first();

结果

"key1"

获取第一个键 II

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

结果

"key1"

3

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

$collectionOfKeys = $collection->keys();

要获取第一个键,您可以执行以下操作:
$key = $collection->keys()->first();

然而,由于keys()方法会返回一个新的集合,因此不可能在一行中将原始集合中的值移除,但您可以使用forget()方法和$key参数或者在之后直接操作原始集合进行移除。

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

这也是我会做的。它很干净,自我解释,并使用专用的Laravel方法。 - lesssugar
@lesssugar,你会让Laravel构建一个可能有数百万个元素的键数组,只是因为你需要第一个元素吗?为什么? - Axalix
我同意splice()是处理这个问题最有效的方法,当Jean发布他的答案时,我正在举例。这种方法可以工作,但在大型集合上效率低下。 - Devon
@Axalix 你抓住我了。 - lesssugar

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

抢先一步了,我刚刚在更新我的答案。 - Devon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接