Laravel покращує маніпуляцію масивами завдяки потужному методу Arr::sole(), який переносить функціональність операції 'sole' з Eloquent до стандартних PHP масивів. Цей метод гарантує, що ви отримаєте точно один відповідний елемент, усуваючи потребу в численних валідаційних перевірках.
Щоб отримати єдиний елемент масиву, зазвичай потрібно окремо перевіряти наявність і унікальність. Arr::sole() об'єднує ці операції в одному, зрозумілому виклику:
use Illuminate\Support\Arr;
// Повертає "foo", коли це єдиний елемент
Arr::sole(['foo']); // "foo"
// Генерує виключення для порожніх масивів
Arr::sole([]); // Генерує ItemNotFoundException
// Генерує виключення для множинних елементів
Arr::sole(['foo', 'bar']); // Генерує MultipleItemsFoundException
Справжня сила методу проявляється під час фільтрації з використанням функцій-зворотів:
use Illuminate\Support\Arr;
// Масив даних про співробітників
$employees = [
['id' => 1, 'name' => 'Sarah', 'department' => 'Engineering'],
['id' => 2, 'name' => 'Mike', 'department' => 'Marketing'],
['id' => 3, 'name' => 'Alex', 'department' => 'Sales'],
];
// Отримання єдиного інженера
$engineer = Arr::sole($employees, fn ($employee) => $employee['department'] === 'Engineering');
// Повертає ['id' => 1, 'name' => 'Sarah', 'department' => 'Engineering']
// Виникне MultipleItemsFoundException, якщо знайдеться кілька інженерів
// Виникне ItemNotFoundException, якщо не буде інженерів
Поведінка методу адаптується в залежності від результатів пошуку:
// Генерує ItemNotFoundException для відсутніх відповідностей
Arr::sole(['apple', 'banana'], fn (string $fruit) => $fruit === 'orange');
// Генерує MultipleItemsFoundException для множинних відповідностей
Arr::sole(['orange', 'apple', 'orange'], fn (string $fruit) => $fruit === 'orange');
У реальному застосуванні ви можете використовувати цей метод для отримання конфігурацій, коли саме одне налаштування повинно відповідати:
class SettingsManager
{
public function getActivePaymentGateway(array $gateways)
{
return Arr::sole($gateways, fn ($gateway) => $gateway['enabled'] === true);
}
public function getPrimaryContact(array $contacts)
{
return Arr::sole($contacts, fn ($contact) => $contact['is_primary'] === true);
}
}
Метод Arr::sole() створює самодокументуючий код, який чітко передає ваше намір знайти саме один елемент, роблячи ваші операції з масивами більш надійними та зрозумілими