Strona główna >PHP >Leksykon PHP – funkcje >array_walk_recursive

array_walk_recursive

array_walk_recursive($array, $callback, $arg)

Działa jak array_walk(), ale schodzi też do tablic zagnieżdżonych. Wywołuje Twoją własną funkcję dla każdej wartości, która sama nie jest tablicą.

Parametry

  • $array – tablica do przejścia. Musi to być zmienna.
  • $callback – funkcja z parametrami wartość, klucz i ewentualnie trzecim parametrem.
  • $arg – opcjonalny, wartość, którą funkcja dostaje jako trzeci parametr.

Przykłady

// obcięcie spacji we wszystkich ciągach znaków zagnieżdżonej tablicy
$data = array("name" => " Jan ", "address" => array("city" => " Gdynia ", "zip" => " 81-301"));
array_walk_recursive($data, function (&$value) { if (is_string($value)) { $value = trim($value); } });
echo json_encode($data); // {"name":"Jan","address":{"city":"Gdynia","zip":"81-301"}}
// spłaszczenie zagnieżdżonej tablicy do jednego poziomu
$tree = array(1, array(2, 3), array(array(4)));
$all = array();
array_walk_recursive($tree, function ($value) use (&$all) { $all[] = $value; });
echo implode(",", $all); // 1,2,3,4
// suma wszystkich liczb
$sum = 0;
array_walk_recursive($tree, function ($value) use (&$sum) { $sum += $value; });
echo $sum; // 10
// funkcja jest wywoływana tylko dla wartości-liści – klucza „address” nie dostaje
$keys = array();
array_walk_recursive($data, function ($value, $key) use (&$keys) { $keys[] = $key; });
echo implode(",", $keys); // name,city,zip

Na co uważać

  • Funkcja jest wywoływana tylko dla wartości-liści. Nie dostaje ani zagnieżdżonej tablicy w całości, ani jej klucza, a puste zagnieżdżone tablice pomija.
  • Wewnątrz funkcji nie da się ustalić, na którym poziomie i w której gałęzi tablicy leży wartość. Jeśli tego potrzebujesz, napisz własną funkcję rekurencyjną.
  • Aby zmieniać wartości, funkcja musi przyjmować wartość przez referencję (&).
  • Nie używaj jej do „oczyszczenia” całego wejścia naraz funkcją htmlspecialchars(). Dane escapuje się dopiero przy wypisywaniu, zależnie od tego, gdzie są wypisywane.

Powiązane funkcje:
array_walk()
array_map()
array_merge_recursive()