Коллбэки во встроенных функциях в PHP
В PHP есть ряд встроенных функций,
которые параметром принимают коллбэки.
Общий принцип работы с ними мы изучим
на примере функции array_map.
Данная функция первым параметром принимает
коллбэк, а вторым - массив. Функция применяет
коллбэк к каждому элементу массива
и возвращает измененный массив.
Давайте посмотрим на варианты использования этой функции с учетом полученных нами ранее знаний.
Вариант 1
Извлечем из каждого элемента массива
квадратный корень с помощью встроенной
функции
sqrt.
Для этого в качестве коллбэка параметром передадим
строку с именем этой функции:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map('sqrt', $arr);
var_dump($res);
?>
Вариант 2
Возведем каждый элемент массива в квадрат с помощью созданной нами обычной функции. Для этого в качестве коллбэка параметром передадим строку с именем этой функции:
<?php
$arr = [1, 2, 3, 4, 5];
function func($num) {
return $num ** 2;
}
$res = array_map('func', $arr);
var_dump($res);
?>
Вариант 3
Переделаем нашу функцию на анонимную, записанную в переменную:
<?php
$arr = [1, 2, 3, 4, 5];
$func = function ($num) {
return $num ** 2;
};
$res = array_map($func, $arr);
var_dump($res);
?>
Вариант 4
Передадим анонимную функцию параметром:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(function ($num) {
return $num ** 2;
}, $arr);
var_dump($res);
?>
Вариант 5
Используем стрелочную функцию:
<?php
$arr = [1, 2, 3, 4, 5];
$res = array_map(fn ($num) => $num ** 2, $arr);
var_dump($res);
?>
Вариант 6
Пусть теперь степень, в которую нужно
возвести число, задается внешней переменной
коллбэка. Воспользуемся этой переменной,
получив к ней доступ через use:
<?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
$arr = [1, 2, 3, 4, 5];
$pow = 3;
$res = array_map(fn ($num) => $num ** $pow, $arr);
var_dump($res);
?>
Практические задачи
Дан массив со строками. Переведите текст каждого элемента массива в верхний регистр.
Дан массив со строками. Переверните текст каждого элемента массива так, чтобы символы шли в обратном порядке.