Коллбэки во встроенных функциях в PHP

В PHP есть ряд встроенных функций, которые параметром принимают коллбэки. Общий принцип работы с ними мы изучим на примере функции array_map. Данная функция первым параметром принимает коллбэк, а вторым - массив. Функция применяет коллбэк к каждому элементу массива и возвращает измененный массив.

Давайте посмотрим на варианты использования этой функции с учетом полученных нами ранее знаний.

Вариант 1

Извлечем из каждого элемента массива квадратный корень с помощью встроенной функции sqrt. Для этого в качестве коллбэка параметром передадим строку с именем этой функции:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  $res = array_map('sqrt', $arr);
  var_dump($res);
?>

Вариант 2

Возведем каждый элемент массива в квадрат с помощью созданной нами обычной функции. Для этого в качестве коллбэка параметром передадим строку с именем этой функции:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  function func($num) {
    return $num ** 2;
  }

  $res = array_map('func', $arr);
  var_dump($res);
?>

Вариант 3

Переделаем нашу функцию на анонимную, записанную в переменную:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  $func = function ($num) {
    return $num ** 2;
  };

  $res = array_map($func, $arr);
  var_dump($res);
?>

Вариант 4

Передадим анонимную функцию параметром:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  $res = array_map(function ($num) {
    return $num ** 2;
  }, $arr);
  
  var_dump($res);
?>

Вариант 5

Используем стрелочную функцию:

php<?php
  $arr = [1, 2, 3, 4, 5];
  
  $res = array_map(fn ($num) => $num ** 2, $arr);
  var_dump($res);
?>

Вариант 6

Пусть теперь степень, в которую нужно возвести число, задается внешней переменной коллбэка. Воспользуемся этой переменной, получив к ней доступ через use:

php<?php
  $arr = [1, 2, 3, 4, 5];
  $pow = 3;
  
  $res = array_map(function ($num) use ($pow) {
    return $num ** $pow;
  }, $arr);
  
  var_dump($res);
?>

Вариант 7

Перепишем предыдущий код через стрелочную функцию. Теперь переменная $pow будет доступна автоматически:

php<?php
  $arr = [1, 2, 3, 4, 5];
  $pow = 3;
  
  $res = array_map(fn ($num) => $num ** $pow, $arr);
  var_dump($res);
?>

Практические задачи

Задание 1

Дан массив со строками. Переведите текст каждого элемента массива в верхний регистр.

Задание 2

Дан массив со строками. Переверните текст каждого элемента массива так, чтобы символы шли в обратном порядке.