Функции обратного вызова массивов — очень мощный инструмент, используя который, программист может добиться гибкости и простоты работы с массивами. Функции обратного вызова массивов создаются для модификации содержимого массивов методом «значение за значением».
Рассмотрим функцию array_map(), которая в общем виде выглядит так:
массив array_map ( функция обработки, массив массив_1 [, массив массив_2…])
При этом стоит учесть, что первый параметр — функция обработки массива, добжна работать именно с тем количеством параметров, которое вы ей передадите. Для примера можно рассмотреть простой пример, который просто проилюстрирует работу этой функции:
<?php function format_values($value) { return '<b>'.$value.'</b>+'; } $myarray = array('Первый элемент', 'Второй элемент', 'Третий элемент', 'Четвертый элемент'); $formatted_array = array_map("format_values", $myarray); echo('<pre>'); print_r($formatted_array); echo('</pre>'); ?>
В результате выполнения этого кода, мы получим значения нашего массива в жирном начертании. В качестве первого параметра функции array_map мы передали имя функции, которая будет обрабатывать каждое значение массива $myarray. Следует отметить что функция array_map возвращаем массив $formatted_array, каждое значение которого обработано функцией format_values.
Этот пример очень примитивен и несет скорее ознакомительную нагрузку. Использование функций обратных вызовов массивов может стать мощным инструментом например при проведении расчетов, или работе с несколькими массивами.
Рассмотрим пример передачи в функцию array_map нескольких массивов:
<?php function calculate($x, $y) { return $x*$y; } $first_array = array(2,3,4); $second_array = array(3,4,5); $calculated_array = array_map("calculate", $first_array, $second_array); echo('<pre>'); print_r($calculated_array); echo('</pre>'); ?>
Теперь функция calculate возвращает произведение элемента массива $first_array на элемент $second_array. Для вывода результата мы используем функцию print_r(), которая отображает все элементы массива с указанием ключа и значения. Вот результат работы скрипта:
Array ( [0] => 6 [1] => 12 [2] => 20 ) Вполне логичным является такой массив, т.к. 2·3=6, 3·4=12, а 4·5=20.
Одним важным фактом является то, что если массивы будут иметь различное количество элементов, то функция будет работать до последнего элемента более «длинного» массива, заменяя значение более «короткого» массива на пустое значение.
Вот простой пример, который это доказывает:
<?php function calculate($x, $y) { return $x*$y; } $first_array = array(2,3,4,8); $second_array = array(3,4,5); $calculated_array = array_map("calculate", $first_array, $second_array); echo('<pre>'); print_r($calculated_array); echo('</pre>'); ?>
Здесь у $first_array больше элементов чем у $second_array, потому результатом будет:Array ( [0] => 6 [1] => 12 [2] => 20 [3] => 0 ). Последнее значение равно нулю, т.к. 8·0=0.
В заключение хочу сказать, что функция array_map, одна из многих, которая позволяет просто и эффективно использовать массивы данных в PHP.