Вкладені масиви (конфігурація, JSON зі стороннього API, payload вебхука) зручно читати крапковою нотацією замість ланцюжка isset:
use Illuminate\Support\Arr;
$data = [
'user' => ['profile' => ['name' => 'Olena']],
'orders' => [['total' => 10], ['total' => 20]],
];
Arr::get($data, 'user.profile.name'); // 'Olena'
Arr::get($data, 'user.email', 'n/a'); // 'n/a' - значення за замовчуванням
Arr::has($data, 'user.profile.name'); // true
data_get - те саме, але для масивів і об'єктів разом і з підтримкою *:
data_get($data, 'orders.*.total'); // [10, 20]
data_get($request->json(), 'payment.status');
data_get($model, 'author.profile.city'); // працює й з Eloquent-моделями
Запис:
Arr::set($config, 'mail.from.address', 'hello@example.com'); // за посиланням
data_set($data, 'orders.*.paid', false); // усім елементам
data_fill($data, 'meta.source', 'api'); // лише якщо ключа ще немає
Arr::forget($data, 'user.password');
Інші корисні методи:
| Метод | Що робить |
|---|---|
Arr::only($a, ['name', 'email']) |
лише вказані ключі |
Arr::except($a, ['password']) |
усі, крім вказаних |
Arr::wrap($value) |
гарантує масив: null → [], 'a' → ['a'] |
Arr::dot($a) / Arr::undot($a) |
вкладений масив ↔ плаский з ключами a.b.c |
Arr::pluck($a, 'user.name') |
значення поля з кожного елемента |
Arr::first($a, fn ($v) => ...) |
перший елемент за умовою |
Arr::string($a, 'key'), Arr::integer(...) |
значення з перевіркою типу, інакше виняток |
Пастка крапкової нотації: якщо в ключі масиву справді є крапка ('version.major' => 1), Arr::get($a, 'version.major') спершу перевіряє точний ключ і знайде його, але data_get і запис через Arr::set трактуватимуть крапку як вкладеність. Для таких даних краще звичайний доступ $a['version.major'].
Arr::wrap особливо корисний для параметрів, що приймають «одне значення або масив»: foreach (Arr::wrap($recipients) as $email) - без перевірок типу.
Для колекцій є ті самі можливості: collect($data)->get(...), ->pluck('user.name'), ->dot(). Якщо дані обробляються ланцюжком перетворень - колекція зручніша, для одного звернення - Arr чи data_get.