Как получить доступ к N-му элементу в коллекции Laravel?

я думаю, что я нарушаю все правила, намеренно делая дубликат вопроса...

на другой вопрос имеет принятый ответ. Это, очевидно, решило проблему Аскеров, но не ответило на вопрос о названии.

давайте начнем с самого начала -first() метод реализован примерно так:

foreach ($collection as $item)
    return $item;

это, очевидно, более надежный, чем принимая $collection[0] или используя другие предлагаемые методы.

нет элемента с индексом 0 или index 15 даже если в коллекции есть 20 предметов. Чтобы проиллюстрировать проблему, давайте возьмем эту коллекцию из документов:

$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(). Как мы можем получить N-й элемент, если он существует и null если это не просто так 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'.

вы можете перефразировать вопрос как "Как получить N-й элемент в порядке foreach?- если кому-то будет яснее.

2 ответов


Я думаю, что быстрее и эффективнее использовать память slice() способ:

$collection->slice($n, 1);

Вы можете попробовать его с помощью values()