З упевненістю витягайте окремі елементи масиву за допомогою методу Arr::sole() у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 26 квітня, 2025
В Laravel метод Arr::sole() революційно спрощує маніпуляцію масивами, поєднуючи перевірку на наявність та унікальність в одному елегантному виклику. Досліджуйте, як цей потужний інструмент може зробити ваш код більш зрозумілим і ефективним у статті!

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() створює самодокументуючий код, який чітко передає ваше намір знайти саме один елемент, роблячи ваші операції з масивами більш надійними та зрозумілими