Половина кода в типичном 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() с одним массивом тоже не переиндексирует результат.