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

Саттардан турган массив берилген. Массивдин ар бир элементинин текстин артка карата жазылгандай кылып, белгилер тескери тартипте жазылсын.