> Faqs > Cómo obtener la posición "n" de una colección de Laravel

Cómo obtener la posición "n" de una colección de Laravel

Tengo una colección en Laravel... esa colección no tiene índices, simplemente los elementos están en sus casillas, como un array.

Quería obtener el elemento que hay en la enésima posición de la colección ¿Cómo lo podría hacer?

Por ejemplo tengo esta colección:

$collection = collect(['primer', 'segundo', 'tercero', 'cuarto', 'quinto']);

Quiero obtener el elemento que hay en la segunda posición.

Respuestas

Para las colecciones de Laravel existe un método que se llama get(). En la documentación lo puedes ver. Aunque en la lectura pueda parecer que funciona solamente con colecciones que tienen llaves, también funciona con colecciones que tienen índices numéricos. Son llaves también al fin y al cabo.

$collection = collect(['primer', 'segundo', 'tercero', 'cuarto', 'quinto']);
$collection->get(1); // devuelve "segundo"
$collection->get(4); // devuelve "quinto"

Este método también permite dar un valor predeterminado, que ahorra posibles comprobaciones sobre si un elemento de la colección exista o no

// Si no estás seguro de que el elemento exista en la colección, puedes proporcionar un valor predeterminado
$elemento = $collection->get($n, 'valor por defecto');

Además, si estás seguro que la colección tiene solamente índices numéricos puedes usar también la notación de array de PHP de toda la vida:

$collection[4]; //devuelve "quinto"

Otra opción un poco más compleja es sacar una sección de la colección de tamaño 1 comenzando por la posición que necesites. Para ello usas el método slice, combinado con el método first. Por si no queda claro, tendrías que usarlo de esta manera:

$collection->slice(4, 1)->first(); //devuelve "quinto"

Esta última opción es la que menos me gusta, porque el código es mucho menos claro y necesitas saber qué hace esa función y q significan los parámetros para entender el código, pero funciona.

Julian
1100 46 84 45
Estupendo, era más sencillo de lo que creía, con la notación de array era suficiente. Aunque si no estas seguro que todo sean índices numericos entiendo que es mejor usar get()