Как получить доступ к n-му объекту в объекте коллекции Laravel?

У меня есть объект коллекции laravel.

Я хочу использовать в ней n-ю модель.

Как мне получить к нему доступ?

Редактировать:

Я не могу найти подходящий метод в документации laravel . Я мог бы перебирать коллекцию в цикле foreach и ломаться при обнаружении n-го элемента:

foreach($collection as $key => $object) { if($key == $nth) {break;} } // $object is now the nth one 

Но это кажется беспорядочным.

Более чистым способом было бы выполнить вышеописанный цикл один раз и создать простой массив, содержащий все объекты в коллекции. Но это кажется ненужным дублированием.

В документации класса коллекции laravel существует метод выборки, но я думаю, что это позволяет получить объект из коллекции, соответствующий первичному ключу, а не n-й в коллекции.

Увидев, что Illuminate\Support\Collection реализует ArrayAccess , вы должны просто использовать квадратную скобку, т. ArrayAccess

 $collection[$nth] 

Это вызывает offsetGet внутренне, что вы также можете использовать

 $collection->offsetGet($nth) 

и, наконец, вы можете использовать метод get который позволяет использовать необязательное значение по умолчанию

 $collection->get($nth) // or $collection->get($nth, 'some default value') 

@ Ответ Фила не совсем получает n-й элемент, так как ключи могут быть неупорядочены. Если у вас есть красноречивая коллекция из db-запроса, она будет работать нормально, но если ваши ключи не являются последовательными, вам нужно сделать что-то другое.

$collection = collect([0 => 'bish', 2 => 'bash']); $collection[1] // Undefined index

Вместо этого мы можем сделать $collection->values()[1] // string(4) bash который использует array_values()

Или даже сделать макрос для этого:

 Collection::macro('nthElement', function($offset, $default = null) { return $this->values()->get($offset, $default); }): 

Пример использования макроса:

 $collection = collect([0 => 'bish', 2 => 'bash']); $collection->nthElement(1) // string(4) 'bash' $collection->nthElement(3) // undefined index $collection->nthElement(3, 'bosh') // string (4) bosh