Наверное, я нарушаю все правила, намеренно задавая повторяющийся вопрос ...
На другой вопрос принято отвечать. Очевидно, это решило проблему спрашивающего, но не ответило на заглавный вопрос.
Начнем с начала - метод first()
реализован примерно так:
foreach ($collection as $item)
return $item;
Очевидно, что это более надежно, чем использование $collection[0]
или других предлагаемых методов.
Может не быть элемента с индексом 0
или индексом 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?» если для кого-то это более понятно.
$collection->get($nth, 'some default value')
- person tam5   schedule 06.11.2016[$nth]
... - person Džuris   schedule 06.11.2016