如何访问Laravel集合对象中的第n个对象?

2022-08-30 16:53:32

我有一个拉拉维尔收集对象。

我想在其中使用第n个模型。

如何访问它?

编辑:

我在 laravel 文档中找不到合适的方法。我可以在 foreach 循环中迭代集合,并在找到第 n 项时中断:

foreach($collection as $key => $object)
{
    if($key == $nth) {break;}
}
// $object is now the nth one

但这似乎很混乱。

一个更简洁的方法是执行上面的循环一次,并创建一个包含集合中所有对象的简单数组。但这似乎是不必要的重复。

laravel集合类文档中,有一个fetch方法,但我认为它从集合中获取与主键匹配的对象,而不是集合中的第n个对象。


答案 1

作为实现,您应该能够简单地使用方括号表示法,即Illuminate\Support\CollectionArrayAccess

$collection[$nth]

这在内部调用,您也可以使用它offsetGet

$collection->offsetGet($nth)

最后,您可以使用允许可选默认值的方法get

$collection->get($nth)
// or
$collection->get($nth, 'some default value')

答案 2

@Phil的答案并不完全获得第n个元素,因为键可能是无序的。如果你从数据库查询中获得了一个雄辩的集合,它可以正常工作,但是如果你的键不是顺序的,那么你需要做一些不同的事情。

$collection = collect([0 => 'bish', 2 => 'bash']); $collection[1] // Undefined index

相反,我们可以做哪些用途$collection->values()[1] // string(4) basharray_values()

或者甚至创建一个宏来执行此操作:

Collection::macro('nthElement', function($offset, $default = null) {
    return $this->values()->get($offset, $default);
}):

宏用法示例:

$collection = collect([0 => 'bish', 2 => 'bash']);
$collection->nthElement(1) // string(4) 'bash'
$collection->nthElement(3) // undefined index
$collection->nthElement(3, 'bosh') // string (4) bosh

推荐