Ответ вслух Junior Массивы изнутри обновлено

array_map, array_filter, array_reduce или foreach

Вопрос

Когда вы используете array_map, array_filter, array_reduce, а когда обычный foreach?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Для простых преобразований беру функции: arraymap чтобы преобразовать каждый элемент, arrayfilter чтобы отобрать, arrayreduce чтобы свести к одному значению, arraycolumn чтобы вытащить поле из списка записей. Со стрелочными функциями fn($u) = $u-email код получается коротким и читаемым.

Что должно прозвучать в ответе

  • Функции массивов для декларативных преобразований и коротких цепочек

  • array_filter сохраняет ключи, array_map сохраняет ключи только для одного массива

  • foreach понятнее для сложной логики, ранних выходов и побочных эффектов

  • Производительность сопоставима, foreach без вызова колбэка обычно быстрее

  • Стрелочные функции fn для коротких колбэков, они захватывают переменные автоматически

Что могут спросить следом

  • Что вернёт array_map с двумя массивами?
  • Как сохранить ключи при array_map?

Разбор

Для простых преобразований беру функции: array_map чтобы преобразовать каждый элемент, array_filter чтобы отобрать, array_reduce чтобы свести к одному значению, array_column чтобы вытащить поле из списка записей. Со стрелочными функциями fn($u) => $u->email код получается коротким и читаемым.

Нужно помнить детали: array_filter сохраняет ключи, и после него часто нужен array_values; array_map сохраняет строковые ключи, только если передан один массив.

Обычный foreach выбираю, когда логика сложная: несколько условий, ранний выход через break, накопление сразу нескольких результатов. По скорости foreach обычно немного быстрее, потому что нет вызова функции на каждый элемент, но на обычных объёмах это не важно, решает читаемость.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.