
Recupera un único valor de un array mediante el método Arr::sole() de Laravel
- Publicado el 24 abril, 2025
- Palabras: 158
¿Necesitas extraer con seguridad un único elemento coincidente de un array en Laravel? El nuevo método Arr::sole() incorpora la funcionalidad "único" de Eloquent a arrays PHP simples.

Al trabajar con arrays, a veces es necesario recuperar un elemento con la seguridad de que es el único que cumple con los criterios. Tradicionalmente, esto requería múltiples comprobaciones: primero para encontrar elementos coincidentes y luego para verificar que haya exactamente una coincidencia. El nuevo método Arr::sole() de Laravel agiliza este proceso al gestionar ambos aspectos en una sola operación expresiva.
Este método recupera un único valor de un array mediante el clousure especificado. Si más de un valor del array coincide con la condición especificada, se generará una excepción Illuminate\Support\MultipleItemsFoundException. Si ningún valor coincide, se generará una excepción Illuminate\Support\ItemNotFoundException.Veamos cómo funciona:
use Illuminate\Support\Arr;
// Returns "foo" if it's the only item in the array
Arr::sole(['foo']); // "foo"
// Throws an exception if the array is empty
Arr::sole([]); // Throws ItemNotFoundException
// Throws an exception if there are multiple items
Arr::sole(['foo', 'bar']); // Throws MultipleItemsFoundException
#Ejemplo práctico
El método Arr::sole() se vuelve aún más poderoso cuando se combina con una función de callback para filtrar elementos según criterios específicos:
use Illuminate\Support\Arr;
// User data array
$users = [
['id' => 1, 'name' => 'Taylor', 'role' => 'admin'],
['id' => 2, 'name' => 'Abigail', 'role' => 'user'],
['id' => 3, 'name' => 'James', 'role' => 'user'],
];
// Get the sole admin user
$adminUser = Arr::sole($users, fn ($user) => $user['role'] === 'admin');
// Returns ['id' => 1, 'name' => 'Taylor', 'role' => 'admin']
// Esto generaría una excepción MultipleItemsFoundException si hubiera varios administradores
// Esto lanzaría ItemNotFoundException si no hubiera administradores
El método responderá de manera diferente según lo que encuentre:
// Lanza ItemNotFoundException si ningún elemento coincide con la devolución de llamada
Arr::sole(['foo', 'bar'], fn (string $value) => $value === 'baz');
// Lanza MultipleItemsFoundException si coinciden varios elementos
Arr::sole(['baz', 'foo', 'baz'], fn (string $value) => $value === 'baz');
Al aprovechar Arr::sole(), puede escribir código más expresivo y que revele intenciones y que comunique claramente su expectativa de encontrar exactamente un elemento coincidente.
Fuente: Harris Raftopoulos
Artículos relacionados
Inicia la conversación
Hazte miembro de Antonio Jenaro para comenzar a comentar.
Regístrate ahora¿Ya estás registrado? Inicia sesión