array_walk

(PHP 4, PHP 5, PHP 7, PHP 8)

array_walkПрименяет пользовательскую функцию к каждому элементу массива

Описание

array_walk(array|object &$array, callable $callback, mixed $arg = null): true

Функция применяет пользовательскую callback-функцию к каждому элементу массива array.

Функция array_walk() не зависит от внутреннего указателя массива array. Функция array_walk() обойдёт каждый элемент массива независимо от позиции указателя.

Список параметров

array

Входной массив.

callback

При вызове функции только с двумя аргументами в callback-функцию передаётся два аргумента. Первый — значение элемента массива array, а второй — ключ или индекс элемента.

Замечание:

Первый параметр callback-функции определяют как ссылку, чтобы callback-функция работала не с копией, а с исходным значением массива, тогда изменения элементов внутри функции обратного вызова изменят сам исходный массив.

Замечание:

Многие внутренние функции наподобие strtolower() выбрасывают ошибку, если количество переданных аргументов превышает количество параметров функции, поэтому такие внутренние функции нельзя указывать как значение параметра callback.

Разрешается изменять только значения массива array; структуру самого массива изменить нельзя. Программисту нельзя добавлять, удалять или изменять порядок элементов. Поведение функции становится неопределённым и непредсказуемым, если callback-функция не соответствует этому требованию.

arg

Необязательный параметр arg, передаётся в callback-функцию как третий аргумент, если указали.

Возвращаемые значения

Функция возвращает логическое значение true.

Ошибки

Начиная с PHP 7.1.0 функция выбрасывает исключение ArgumentCountError, если callback-функция требует больше двух параметров, тогда как передаются только значение и ключ элемента массива, или больше 3 параметров, если также передаётся аргумент arg. Раньше при таких условиях каждый раз, когда функция array_walk() вызывала callback-функцию, генерировалась ошибка уровня E_WARNING.

Список изменений

Версия Описание
8.2.0 Значение возврата теперь принадлежит типу true; раньше значение принадлежало типу bool.
8.0.0 Теперь функция выдаёт ошибку уровня E_WARNING, если параметр callback ожидает, что значение второго или третьего аргумента передадут по ссылке.

Примеры

Пример #1 Пример обработки значений при обходе массива функцией array_walk()

<?php

$fruits
= array("d" => "лимон", "a" => "апельсин", "b" => "банан", "c" => "яблоко");

function
test_alter(&$item1, $key, $prefix)
{
$item1 = "$prefix: $item1";
}

function
test_print($item2, $key)
{
echo
"$key. $item2\n";
}

echo
"До:…\n";
array_walk($fruits, 'test_print');

array_walk($fruits, 'test_alter', 'фрукт');
echo
"\n…и после:\n";

array_walk($fruits, 'test_print');

?>

Результат выполнения приведённого примера:

До:…
d. лимон
a. апельсин
b. банан
c. яблоко

…и после:
d. фрукт: лимон
a. фрукт: апельсин
b. фрукт: банан
c. фрукт: яблоко

Пример #2 Пример использования функции array_walk() с анонимной функцией

<?php

$elements
= ['a', 'b', 'c'];

array_walk($elements, function ($value, $key) {
echo
"{$key} => {$value}\n";
});

?>

Результат выполнения приведённого примера:

0 => a
1 => b
2 => c

Смотрите также

  • array_walk_recursive() - Рекурсивно применяет пользовательскую функцию к каждому элементу массива
  • iterator_apply() - Вызывает функцию для каждого элемента в итераторе
  • list() - Присваивает переменным значения как массиву
  • each() - Возвращает текущую пару ключа и значения массива и сдвигает указатель на одну позицию вперёд
  • call_user_func_array() - Вызывает callback-функцию с массивом параметров
  • array_map() - Применяет callback-функцию к элементам массивов
  • foreach