Ten wpis jest kontynuacją poprzedniego wpisu z podstawowymi operacjami na tablicach w PHP. Tym razem opisuje bardziej zaawansowane funkcje, które ułatwiają pracę z tablicami.

 

array_map() – wykonuje funkcje podaną w pierwszym argumencie na każdym elemencie tablicy i zwraca nową tablicę

 

function multiplyx2($element)
{
   return $element * 2;
}

$sampleArray = [1,2,3,4,5];


$result = array_map('multiplyx2', $sampleArray);

print_r($result);

array_reduce() – pozwala zredukować tablicę do jednego elementu wykonując na nim funkcje podaną w drugim argumencie. Możemy przykładowo w ten sposób zsumować wszystkie elementy w tablicy

function sum($carry, $element)
{
   return $carry += $element;
}

$sampleArray = [1,2,3,4,5];


$result = array_reduce($sampleArray, 'sum');

print_r($result); //15

array_walk() – pozwala przejść po każdym elemencie tablicy i użyć na nim funkcji podanej jako $callback, array_walk pozwala użyc trzeciego argumentu, który jest przekazywany do funkcji przykład:

//element przekazywany jest przez referencje

function multiplyx2(&$element, $key, $exp)
{
   $element = pow($element, $exp);
}

array_walk($sampleArray, 'multiplyx2' , 2);

print_r($sampleArray);

 

array_walk_recursive() – działa tak samo jak array_walk() ale pozwala wykonać funkcję na tablicach wielowymiarowych

$sampleArray = [1 => [1,2,3] ,2,3=>[4,5 => [1,2]],4,5];


//element przekazywany jest przez referencje

function multiplyx2(&$element, $key, $exp)
{
   $element = pow($element, $exp);
}

array_walk_recursive ($sampleArray, 'multiplyx2' , 2);

print_r($sampleArray);

inne przydatne funkcje:

  • key_exists()/array_key_exists() -> sprawdza czy klucz istnieje w tablicy
  • shuffle() – miesza tablice(losowo ustawia kolejnośc elementów)
  • sizeof()/count() – zwraca liczbę elementów w tablicy, podając drugi argument jako stałą COUNT_RECURSIVE może działać dla tablic wielowymiarowych

Obsługa tablic w PHP jest dośc przyjemna z uwagi na dużą ilość wbudowanych funkcji. W kolejnym wpisie przedstawie funkcje, które operują na zbiorach. Jeśli masz jakieś pytania zapraszam do komentowania.