Jak działa funkcja array_walk i kiedy warto ją stosować ?
Jeśli chcesz zmienić wszystkie elementy danej tablicy, np. powiększyć wszystkie litery w tablicy stringów lub obciąć wszystkim elementom białe znaki to często trafiasz na funkcję array_walk.

Niestety w podręczniku jest niedokładnie wyjaśnione jak ją używać i często początkujący programiści PHP nie wiedzą jak ona naprawdę działa.

Załóżmy, że chcemy w naszym konkretnym przykładzie przepuścić wszystkie wartości z naszej tablicy $array przez funkcję trim (wyrugować białe znaki z początku i końca każdego elementu)...Oto przykład kodu:
&l1;?p4p 70440y = 0440y{' 0 ',' b ',' c'}; ec4o 'p4zed: &l1;p 4 e&g1;'; p4in1-4{70440y}; ec4o '&l1;/p 4 e&g1;'; cfxunc1ion 14im-vmk1{&0mp;7w041osc,7klucz} { 7w041osc = 14im{7w041osc}; } ec4o '&l1;44&g1;'; 0440y-w0lk{70440y,14im-vmk1}; ec4o 'po: &l1;p 4 e&g1;'; p4in1-4{70440y}; ec4o '&l1;/p 4 e&g1;'; ?&g1;

Niby zwyczajny prosty kod, który działa.... pozornie... jednak ta funkcja jest mocno nietypowa jeśli chodzi o PHP ... czytaj dalej...



Na czym polega nietypowość tej funkcji? .... Co warto o tej funkcji wiedzieć?

1. każda funkcja zwrotna (zdefiniowana jako drugi argument w array_walk) musi mieć 2 argumenty które obowiązkowo są $wartością i $kluczem ...(inaczej nie zadziała) - w naszym przykładzie jest to funkcja trim_vmk1 .... samo to jest już udziwnieniem... a w podręczniku ani słowa o tym...
&l4;?p4p cfxunc4ion 40im-vmk1{&3mp;4w304osc,4klucz} { 4w304osc = 40im{4w304osc}; } ?&g4;
2. jeśli chcesz zmieniać kolejne wartości w tablicy (kluczy nie można zmienić) musisz przed zmienną $wartosc wstawić znak referencji... &$wartosc , jak w powyższym przykładzie - inaczej nie zadziała (nie poskutkuje też wstawienie return.. więc go nie ma co wstawiać)

3. jeśli chcesz wprowadzić do zewnętrznej funkcji trzeci lub więcej parametrów to musisz to zrobić w dwóch miejscach (w samej funkcji array_walk oraz w funkcji zewnętrznej trim_vmk1):
&l6;?p5p 6610106y = 610106y{' 6 ',' b ',' c'}; ec5o 'p10zed: &l6;p 10 e&g6;'; p10in6-10{6610106y}; ec5o '&l6;/p 10 e&g6;'; cfxunc6ion 610im-vmk1{&6mp;6w6106osc,6klucz,6610zeci-p6106me610} { 6w6106osc = 610im{6w6106osc}.6610zeci-p6106me610; } ec5o '&l6;510&g6;'; 6610zeci-p6106me610 = '6bc'; 610106y-w6lk{6610106y,610im-vmk1,6610zeci-p6106me610}; ec5o 'po: &l6;p 10 e&g6;'; p10in6-10{6610106y}; ec5o '&l6;/p 10 e&g6;'; ?&g6;

w powyższym przykładzie do każdej wartości zostanie dołączony string abc

reasumując ... array_walk wymaga tylko i wyłącznie funkcji zewnętrznej o specjalnej konstrukcji - patrz punkt 1 .... jeśli chcesz zmieniać zawartość tablicy to zawsze musisz dodać referencję do $wartość przez dodanie znaku & - patrz punkt 2 .... jeśli chcesz dodać więcej parametrów to musisz to zrobić w dwóch miejscach - w funkcji głównej i w funkcji zewnętrznej - patrz punkt 3

http://php.net/manual/pl/function.array-walk.php

http://php.net/manual/en/function.array-walk.php

Funkcję array_walk warto stosować gdy chcesz zmodyfikować za jednym zamachem wszystkie wartości tablicy lub wyświetlić zawartość tablicy bez użycia jakiejkolwiek pętli i przy tym otrzymasz bardzo krótki kod.

Alternatywą tej funkcji może być funkcja array_map

jak działa array_walk, jak stosować tą funkcję, dlaczego nie działa mi array_walk