# 05. Работа с массивами и коллекциями

[← Оглавление](./index.md)

---

## Встроенные функции вместо foreach-циклов

**ПЛОХО**
```php
$activeClientIds = [];
foreach ($clients as $client) {
    if ($client['UF_ACTIVE'] === 'Y') {
        $activeClientIds[] = $client['ID'];
    }
}
```

**ХОРОШО**
```php
$activeClients = array_filter($clients, fn($c) => $c['UF_ACTIVE'] === 'Y');
$activeClientIds = array_column($activeClients, 'ID');
```

---

## Вложенные массивы — разворачивание через array_merge / array_column

**ПЛОХО — ВЛОЖЕННЫЕ ЦИКЛЫ**
```php
$allPhones = [];
foreach ($contacts as $contact) {
    foreach ($contact['PHONE'] as $phone) {
        $allPhones[] = $phone['VALUE'];
    }
}
```

**ХОРОШО**
```php
$allPhones = array_merge(...array_column($contacts, 'PHONE'));
$phoneNumbers = array_column($allPhones, 'VALUE');
```

---

## Коллекции объектов для сложных структур

**ПЛОХО — РУЧНОЙ ЦИКЛ ДЛЯ АГРЕГАЦИИ**
```php
$sum = 0;
foreach ($dealProducts as $row) {
    $sum += $row['PRICE'] * $row['QUANTITY'];
}
```

**ХОРОШО — ILLUMINATE/COLLECTIONS**
```php
use Illuminate\Support\Collection;

$totalSum = Collection::make($dealProducts)
    ->sum(fn($row) => $row['PRICE'] * $row['QUANTITY']);
```