Язык программирования PHP | страница 66
>uasort($books,"cmp");
>// сортируем массив с помощью функции cmp
>foreach ($books as $key => $book) {
> echo "$book[0]: \"$key\"
";
>}
>function cmp($a,$b){
>// функция, определяющая способ сортировки
> if ($a[1] < $b[1]) return -1;
> elseif ($a[1]==$b[1]) return 0;
> else return 1;
>}
>?>
В результате получим:
>Пушкин: "Руслан и Людмила"
>Лермонтов: "Герой нашего времени"
>Толстой: "Война и мир"
>Достоевский: "Идиот"
Мы применили нашу собственную функцию сортировки ко всем элементам массива. Далее рассмотрим, как применить к элементам массива любую другую пользовательскую функцию.
Применение функции ко всем элементам массива
Функция array_walk(массив, функция [, данные]) применяет созданную пользователем функцию функция ко всем элементам массива массив и возвращает true в случае успешного выполнения операции и false – в противном случае.
Пользовательская функция, как правило, имеет два аргумента, в которые поочередно передаются значение и ключ каждого элемента массива. Но если при вызове функции array_walk() указан третий аргумент, то он будет рассмотрен как значение третьего аргумента пользовательской функции, смысл которого определяет сам пользователь. Если функция пользователя требует больше аргументов, чем в нее передано, то при каждом вызове array_walk() будет выдаваться предупреждение.
Если необходимо работать с реальными значениями массива, а не с их копиями, следует передавать аргумент в функцию по ссылке. Однако нужно иметь в виду, что нельзя добавлять или удалять элементы массива и производить действия, изменяющие сам массив, поскольку в этом случае результат работы array_walk() считается неопределенным.
>
>$books1 = array(
> "А.С. Пушкин"=>"Руслан и Людмила",
> "Л.Н. Толстой"=>"Война и мир",
> "М.Ю. Лермонтов"=>"Герой нашего времени");
>// создаем функцию, которую хотим
>// применить к элементам массива
>function try_walk($val,$key,$data){
> echo "$data \"$val\" написал $key
";
>}
>// применяем ко всем элементам массива
>// $book1 функцию try_walk
>array_walk($books1,"try_walk","Роман");
>?>
В результате работы скрипта получим:
>Роман "Руслан и Людмила" написал А.С. Пушкин
>Роман "Война и мир" написал Л.Н. Толстой
>Роман "Герой нашего времени"
> написал М.Ю. Лермонтов
Заметим, что мы не изменили значений у элементов массива. Чтобы их изменить, надо было передавать значения в переменную $val функции try_walk по ссылке.
>
>$books1 = array(
> "А.С. Пушкин"=>"Руслан и Людмила",
> "Л.Н. Толстой"=>"Война и мир",