laravel - 如何访问 Laravel 集合中的第 n 个项目?

标签 laravel laravel-collection

我想我故意提出重复的问题违反了所有规则......

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/

相关文章:

php - Laravel 5.2 - 修改模型的构建器

基于对象类型的 PHP 操作最佳实践

php - Laravel 5.2WhereNotIn 查询

php - 类似于 DB FIELD 的 Laravel 集合顺序

laravel - Eloquent 集 : Counting and Detect Empty

php - Laravel 从关系中提取字段

php - Laravel 集合 - 扁平化不起作用

php - 如何在 Laravel 4 中选择相关模型计数为 0 的模型?

php - Laravel 集合中的 "Skip"方法

javascript - 将数据从 javascript 变量传递到 PHP 变量