array_walk i array_walk_recursive

Obie funkcje służą do iterowania po tablicy, przy czym podczas każdej iteracji wywoływana jest funkcja zdefiniowana przez użytkownika (tzw. funkcja wywołania zwrotnego – z angielskiego callback function) dla każdego elementu. array_walk_recursive różni się od array_walk tym, że, jak sama nazwa wskazuje, funkcja wywołania zwrotnego wykonywana jest rekursywnie dla każdego elementu.

array_walk

bool array_walk (array &$array, callback $funcname [, mixed $userdata])
Wykonuje zdefiniowaną przez użytkownika funkcję dla każdego elementu tablicy $array. array_walk przejdzie przez każdy element tablicy niezależnie od położenia wewnętrznego wskaźnika tablicowego. Argumenty
$array – tablica wejściowa
$funcname - funkcja zdefiniowana przez użytkownika wykonywana na każdym elemencie tablicy. Przeważnie $funcname przyjmuje dwa parametry: wartość bieżącego elementu tablicy $array oraz jego klucz
$userdata - opcjonalny parametr; jeśli został on zdefiniowany podczas deklaracji funkcji, zostanie on przekazany jako trzeci parametr
Zwracane wartości
Zwraca TRUE podczas powodzenia, lub FALSE przy niepowodzeniu. Jeśli funcname wymaga więcej parametrów niż jej przekazano, zostanie wygenerowany błąd poziomu E_WARNING.
Przykład działania:
$array = array('d' => 'lemon', 'a' => 'orange', 'b' => 'banana', 'c' => 'apple');
 
function test_alter(&$item1, $key, $prefix)
{
	$item1 = "{$prefix}_{$item1}";
}
 
function test_print($item2, $key)
{
	echo "$key . $item2<br/>";
}
 
echo 'Przed:<br/>';
array_walk($array, 'test_print');
array_walk($array, 'test_alter', 'fruit');
 
echo 'Po:<br/>';
array_walk($array, 'test_print');
Powyższy kod wyświetli
Przed:
d . lemon
a . orange
b . banana
c . apple
Po:
d . fruit_lemon
a . fruit_orange
b . fruit_banana
c . fruit_apple

array_walk_recursive

array_walk_recursive działa podobnie z tą różnicą, że „wchodzi” ona w głębsze wymiary tablicy, jeśli takowe istnieją. Oto nieco zmodyfikowana wersja powyższego kodu:
$array = array('d' => 'lemon', 'a' => 'orange', 'b' => 'banana', 'c' => 'apple', 'z' => array(1,'foo' => 2,3));
 
function test_alter(&$item1, $key, $prefix)
{
	$item1 = "{$prefix}_{$item1}";
}
 
function test_print($item2, $key)
{
	echo "$key . $item2<br/>";
}
 
echo 'Przed:<br/>';
array_walk_recursive($array, 'test_print');
array_walk_recursive($array, 'test_alter', 'pre');
 
echo 'Po:<br/>';
array_walk_recursive($array, 'test_print');
Powyższe wyświetli nam:
Przed:
d . lemon
a . orange
b . banana
c . apple
0 . 1
foo . 2
1 . 3
Po:
d . pre_lemon
a . pre_orange
b . pre_banana
c . pre_apple
0 . pre_1
foo . pre_2
1 . pre_3
Warto zauważyć, że klucz ‘z’ nie jest w ogóle wyświetlony – jest tak dlatego, że każdy klucz który przechowuje tablicę, nie będzie przekazany do funkcji.

, ,

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

*

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">