我想我故意提出重复的问题是在打破所有规则......
另一个问题有一个公认的答案。它显然解决了提问者的问题,但它没有回答标题问题。
让我们从头开始 - 该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');
现在,我们是否有任何可靠(最好是简洁)的方法来访问第 n 个项目$keyed
?
我自己的建议是:
$nth = $keyed->take($n)->last();
但这会在$keyed->last()
任何时候给出错误的项目 () $n > $keyed->count()
。null
如果它存在并且它不只是行为,我们如何获得第 n 个项目first()
?
编辑
为了澄清,让我们考虑这个集合:
$col = collect([
2 => 'a',
5 => 'b',
6 => 'c',
7 => 'd']);
第一项是$col->first()
。如何获得第二个?
$col->nth(3)
应该返回'c'
(或者'c'
如果从 0 开始,但这将与 不一致first()
)。$col[3]
不起作用,它只会返回一个错误。
$col->nth(7)
应该返回null
,因为没有第七项,只有四个。$col[7]
行不通,它只会返回'd'
。
您可以将问题改写为“如何在 foreach 订单中获取第 n 个项目?” 如果对某些人来说更清楚的话。