Застосування функції до всіх елементів масиву

 

Функція array_walk (масив, функція [, дані]) застосовує створену користувачем функцію до всіх елементів масиву масив і повертає true у разі успішного виконання операції і false - в протилежному випадку.

Функція користувача, як правило, має два аргументи, у які по черзі передаються значення і ключ кожного елемента масиву. Але якщо при виконанні функції array_walk () вказано третій аргумент, то він буде розглянутий, як значення третього аргументу для функції користувача, зміст якого визначає сам користувач. Якщо функція користувача потребує більше аргументів, ніж у неї передано, то при кожному виклику array_walk () буде видаватися попередження.

Якщо необхідно працювати з реальними значеннями масиву, а не з їх копіями, слід передавати аргумент на функцію по посиланню. Однак потрібно мати на увазі, що не можна додавати або видаляти елементи масиву і проводити дії, що змінюють сам масив, оскільки в цьому випадку результат роботи array_walk () вважається невизначеним.

Приклад. Застосування функції до всіх елементів масиву

<? Php 
$books1 = array ( 
"А. С. Пушкін" => "Руслан і Людмила", 
"Л. Н. Толстой" => "Війна і мир", 
"М. Ю. Лермонтов" => "Герой нашого часу"); 
// Створюємо функцію, яку хочемо 
// Застосувати до елементів масиву 

function try_walk ($val, $key, $data) { 
echo "$data \" $val \ "написав $key <br>"; 

// Застосовуємо до всіх елементів масиву 
// $books1 функцію try_walk 
array_walk ($books1, "try_walk", "Роман");
?>

У результаті роботи скрипта одержимо: 
Роман "Руслан і Людмила" написав А.С. Пушкін 
Роман "Війна і мир" написав Л.М. Толстой 
Роман "Герой нашого часу" написав М.Ю. Лермонтов

Зауважимо, що ми не змінили значень у елементах масиву. Щоб їх змінити, треба було передавати значення в змінну $val функції try_walk по посиланню.

Приклад. Застосування функції до всіх елементів масиву. Варіант 2

<? Php 
$books1 = array ( 
"А. С. Пушкін" => "Руслан і Людмила", 
"Л. Н. Толстой" => "Війна і мир", 
"М. Ю. Лермонтов" => "Герой нашого часу"); 
// Створюємо функцію, яку хочемо 
// Застосувати до елементів масиву 

function try_walk (&$val, $key) { 
$key = "<p> Автор:". $key. "<br>"; 
$val = "Назва: \" ". $val." \ ""; 
echo $key. $val; 

// Застосовуємо до всіх елементів масиву 
// $book1 функцію try_walk 

array_walk ($books1, "try_walk"); 
print_r ($books1); 
?>

У результаті роботи скрипта одержимо: 
Автор: А.С. Пушкін 
Назва: "Руслан і Людмила" 
Автор: Л.М. Толстой 
Назва: "Війна і мир" 
Автор: М.Ю. Лермонтов 
Назва: "Герой нашого часу" 
Array ([А. С. Пушкін] => 
Назва: "Руслан і Людмила" 
[Л.М. Толстой] => 
Назва: "Війна і мир" 
[М.Ю. Лермонтов] => 
Назва: "Герой нашого часу")