Половина кода в типичном PHP-проекте — это перебор массивов. Вот функции, которые закрывают большинство задач без циклов и лишних переменных.
Выборка и переиндексация
$users = [
['id' => 10, 'name' => 'Анна', 'city' => 'Москва'],
['id' => 11, 'name' => 'Игорь', 'city' => 'Казань'],
];
$names = array_column($users, 'name'); // ['Анна', 'Игорь']
$byId = array_column($users, null, 'id'); // [10 => [...], 11 => [...]]
$cities = array_count_values(array_column($users, 'city'));
Фильтрация и преобразование
array_filter() сохраняет ключи, поэтому результат часто нужно переиндексировать через array_values().
$adults = array_values(array_filter($users, fn ($u) => $u['age'] >= 18));
$emails = array_map(fn ($u) => strtolower($u['email']), $users);
Сравнение массивов
Для проверки «что изменилось» удобны array_diff_key() и array_diff_assoc() — они сравнивают по ключам и парам ключ-значение.
$old = ['name' => 'Анна', 'city' => 'Москва', 'phone' => '+7 900'];
$new = ['name' => 'Анна', 'city' => 'Казань'];
$changed = array_diff_assoc($new, $old); // ['city' => 'Казань']
$removed = array_diff_key($old, $new); // ['phone' => '+7 900']
Сортировка
usort() меняет исходный массив. Для сортировки по нескольким полям удобен оператор сравнения массивов:
usort($products, fn ($a, $b) => [$a['price'], $a['name']] <=> [$b['price'], $b['name']]);
Мелочи, которые экономят время
array_key_first()иarray_key_last()— безreset()иend().array_is_list()— проверить, что массив последовательный.array_reduce()— когда из списка нужен один результат.array_combine()— собрать ассоциативный массив из двух списков.
Все функции предсказуемо работают с ключами — главное помнить, что array_filter() их сохраняет, а array_map() с одним массивом тоже не переиндексирует результат.