Выполнить функцию для каждого элемента массива
1-ый способ
Выполнить функцию для каждого элемента массива можно через функцию array_map()
.
$array = ['php', 'mysql']; # сделать все элементы массива прописными буквами function do_upper($arr) { return mb_strtoupper($arr, 'UTF-8'); } $array_upper = array_map('do_upper', $array); $array_upper; // [PHP, MYSQL]
Если в функцию array_map()
будет передан вложенный массив, то PHP вернёт ошибку «Warning: mb_strtoupper() expects parameter 1 to be string, array given».
2-ой способ: заменить текущие элементы массивы
Функция array_map()
возвращает новый массив, не затрагивая исходный массив. Также есть функция array_walk()
, которая заменяет элементы в указанном массиве, применяя к ним указанную функцию.
$array = ['php', 'mysql']; # сделать все элементы массива прописными буквами function do_upper(&$arr) { $arr = mb_strtoupper($arr, 'UTF-8'); } array_walk($array, 'do_upper'); $array; // [PHP, MYSQL]
Функция array_walk()
также не поддерживет вложенные массивы (выводит ошибку «Warning: mb_strtoupper() expects parameter 1 to be string, array given»).
Но есть отдельная функция array_walk_recursive()
, которая применяет код к каждому элементу массиву, включая элементы вложенных массивов.
$array = ['php', 'mysql', ['zend']]; function do_upper(&$arr) { $arr = mb_strtoupper($arr, 'UTF-8'); } array_walk_recursive($array, 'do_upper'); print_r($array); /* Array ( [0] => PHP, [1] => MYSQL, [2] => Array ( [0] => ZEND ) ) */
2-ой способ
Также можно использовать цикл foreach
через символ &
.
$array = [2, 4, 6]; foreach ($array as &$arr) { $arr *= 2; } unset($arr); // array(4, 8, 12)
На примере выше удаляется переменная $arr
, чтобы случайно не изменить последний элемент массива в другом коде.
Авторизуйтесь, чтобы добавлять комментарии