Написать письмо авторам |
УЧЕБНИК PHP |
справочник функций <Оnline> |
Об учебнике |
Обновление |
Функция array_walk()array_walk()Достаточно важная функция, позволяющая применять пользовательскую функцию к каждому элементу массива. Синтаксис: bool array_walk(array arr, callback func [, mixed userdata]) Как видно из синтаксиса этой функции, она применяет пользовательскую функцию func к каждому элементу массива arr. В пользовательскую функцию передаются два или три аргумента: значение текущего элемента, его индекс и аргумент userdata. Последний аргумент является необязательным. Заметим, что в случае, если func требует более трех аргументов, при каждом ее вызове будет выдаваться предупреждение, и, чтобы они не выдавались, нужно поставить знак "@" перед функцией array_walk(). Заметим также, что функция func получает значения и индексы массива arr таким образом, что не может их изменять. Если возникает такая необходимость, нужно передавать аргумент arr по ссылке. В этом случае все изменения отразятся в массиве. Давайте посмотрим, как эта функция применяется. Допустим, мы хотим вывести все элементы массива. Для этого мы должны сначала написать функцию, которая будет их выводить, а затем вызовем ее при помощи функции array_walk(): Пример: <? $name = array ("m"=>"maks", "i"=>"igor", "s"=>"sergey"); function print_array ($item, $key) { echo "$key=>$item<br>\n"; } array_walk ($name, 'print_array'); ?> И что вышло: Результат:
Важное замечание. Вообще говоря, в приведенном выше коде, есть, скажем так неточность. А именно – мы не установили курсор массива в начало массива, и перед тем, как вызывать функцию array_walk() надо вызывать функцию reset() для этой цели, потому что array_walk() начинает работать с того элемента, на котором находится курсор массива. Давайте теперь возьмем массив, и увеличим значения каждого его элемента на единицу. Пример: <? $number = array ("1"=>"15", "2"=>"20", "3"=>"25"); function printarray ($item, $key) { echo "$key=>$item<br>\n"; } function add_array (&$item, $key) // параметр $item передаем по ссылке, так как // его нам надо изменять { $item = $item + 1; } echo("Before:<br>"); array_walk ($number, 'printarray'); echo("After:<br>"); array_walk ($number, 'add_array'); array_walk ($number, 'printarray'); ?> Результат:
|
Наверх |