Как получить доступ к 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);