Funcțiile callback în funcțiile încorporate în PHP

În PHP există o serie de funcții încorporate, care acceptă funcții callback ca parametru. Vom studia principiul general de lucru cu ele folosind ca exemplu funcția array_map. Această funcție acceptă ca prim parametru un callback, iar ca al doilea - un array. Funcția aplică callback-ul fiecărui element al array-ului și returnează array-ul modificat.

Să ne uităm la opțiunile de utilizare a acestei funcții ținând cont de cunoștințele noastre anterioare.

Opțiunea 1

Să extragem rădăcina pătrată din fiecare element al array-ului folosind funcția încorporată sqrt. Pentru aceasta, ca parametru callback vom transmite un șir cu numele acestei funcții:

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

Opțiunea 2

Să ridicăm fiecare element al array-ului la pătrat folosind o funcție obișnuită creată de noi. Pentru aceasta, ca parametru callback vom transmite un șir cu numele acestei funcții:

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

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

Opțiunea 3

Să modificăm funcția noastră într-una anonimă, scrisă într-o variabilă:

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

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

Opțiunea 4

Să transmitem funcția anonimă ca parametru:

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

Opțiunea 5

Să folosim o funcție arrow:

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

Opțiunea 6

Să presupunem că puterea la care trebuie să ridicăm numărul, este dată de o variabilă externă callback-ului. Să folosim această variabilă, obținând acces la ea prin 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);
?>

Opțiunea 7

Să rescriem codul anterior folosind o funcție arrow. Acum variabila $pow va fi disponibilă automat:

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

Probleme practice

Задание 1

Este dat un array cu șiruri. Traduceți textul fiecărui element al array-ului în majuscule.

Задание 2

Este dat un array cu șiruri. Inversați textul fiecărui element al array-ului astfel încât caracterele să meargă în ordine inversă.