我想我故意提出重复的问题违反了所有规则......
other question有一个公认的答案。明明解决了提问者的问题,却没有回答标题的问题。
让我们从头开始 - first()
方法的实现大致如下:
foreach ($collection as $item)
return $item;
这显然比采用 $collection[0]
或使用其他建议的方法更可靠。
即使集合中有 20 个项目,也可能没有索引为 0
或索引 15
的项目。为了说明这个问题,让我们从文档中取出这个集合:
$collection = collect([
['product_id' => 'prod-100', 'name' => 'desk'],
['product_id' => 'prod-200', 'name' => 'chair'],
]);
$keyed = $collection->keyBy('product_id');
现在,我们有没有可靠的(最好是简洁的)方法来访问 $keyed
的第 n 项?
我自己的建议是:
$nth = $keyed->take($n)->last();
但是每当 $n > $keyed->count()
时,这都会给出错误的项目 ($keyed->last()
)。如果第 n 个项目存在,我们如何获取它;如果它不像 first()
的行为,我们如何获取 null
?
编辑
为了澄清这一点,让我们考虑一下这个集合:
$col = collect([
2 => 'a',
5 => 'b',
6 => 'c',
7 => 'd']);
第一项是$col->first()
。如何获得第二个?
$col->nth(3)
应该返回 'c'
(如果从 0 开始,则返回 'c'
,但这会与 first()
不一致)。 $col[3]
不起作用,它只会返回一个错误。
$col->nth(7)
应该返回 null
因为没有第七项,只有四项。 $col[7]
不起作用,它只会返回 'd'
。
您可以将问题改写为“如何获取 foreach 订单中的第 n 个项目?”如果对某些人来说更清楚的话。
最佳答案
我想更快、更节省内存的方法是使用 slice()
方法:
$collection->slice($n, 1);
关于laravel - 如何访问 Laravel 集合中的第 n 个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40444759/