Функция array_walk(массив, функция [, данные]) применяет созданную пользователем функцию функция ко всем элементам массива массив и возвращает true в случае успешного выполнения операции и false – в противном случае.
Пользовательская функция, как правило, имеет два аргумента, в которые поочередно передаются значение и ключ каждого элемента массива. Но если при вызове функции array_walk() указан третий аргумент, то он будет рассмотрен как значение третьего аргумента пользовательской функции, смысл которого определяет сам пользователь. Если функция пользователя требует больше аргументов, чем в нее передано, то при каждом вызове array_walk() будет выдаваться предупреждение.
Если необходимо работать с реальными значениями массива, а не с их копиями, следует передавать аргумент в функцию по ссылке. Однако нужно иметь в виду, что нельзя добавлять или удалять элементы массива и производить действия, изменяющие сам массив, поскольку в этом случае результат работы array_walk() считается неопределенным.
<?php $books1 = array( "А.С. Пушкин"=>"Руслан и Людмила", "Л.Н. Толстой"=>"Война и мир", "М.Ю. Лермонтов"=>"Герой нашего времени"); // создаем функцию, которую хотим // применить к элементам массива
function try_walk($val,$key,$data){ echo "$data \"$val\" написал $key<br>"; } // применяем ко всем элементам массива // $book1 функцию try_walk array_walk($books1,"try_walk","Роман"); ?>
Пример 7.11. Применение функции ко всем элементам массива
В результате работы скрипта получим:
Роман "Руслан и Людмила" написал А.С. Пушкин Роман "Война и мир" написал Л.Н. Толстой Роман "Герой нашего времени" написал М.Ю. Лермонтов
Заметим, что мы не изменили значений у элементов массива. Чтобы их изменить, надо было передавать значения в переменную $val функции try_walk по ссылке.
<?php $books1 = array( "А.С. Пушкин"=>"Руслан и Людмила", "Л.Н. Толстой"=>"Война и мир", "М.Ю. Лермонтов"=>"Герой нашего времени"); // создаем функцию, которую хотим // применить к элементам массива
function try_walk(&$val,$key){ $key = "<p>Автор: " .$key ."<br>"; $val = "Название: \"" . $val ."\"</p>"; echo $key.$val; } // применяем ко всем элементам массива // $book1 функцию try_walk
array_walk($books1,"try_walk"); print_r($books1); ?>
Пример 7.12. Применение функции ко всем элементам массива. Вариант 2
В результате работы скрипта получим:
Автор: А.С. Пушкин Название: "Руслан и Людмила" Автор: Л.Н. Толстой Название: "Война и мир" Автор: М.Ю. Лермонтов Название: "Герой нашего времени" Array ( [А.С. Пушкин] => Название: "Руслан и Людмила" [Л.Н. Толстой] => Название: "Война и мир" [М.Ю. Лермонтов] => Название: "Герой нашего времени")