uasort($books,'cmp');

// сортируем массив с помощью функции cmp

foreach ($books as $key => $book) {

echo '$book[0]: '$key'<br>';

}

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() считается неопределенным.

<?php

$books1 = array(

'А.С. Пушкин'=>'Руслан и Людмила',

'Л.Н. Толстой'=>'Война и мир',

'М.Ю. Лермонтов'=>'Герой нашего времени');

// создаем функцию, которую хотим

// применить к элементам массива

function try_walk($val,$key,$data){

echo '$data '$val' написал $key<br>';

}

// применяем ко всем элементам массива

// $book1 функцию try_walk

array_walk($books1,'try_walk','Роман');

?>

В результате работы скрипта получим:

Роман 'Руслан и Людмила' написал А.С. Пушкин

Роман 'Война и мир' написал Л.Н. Толстой

Роман 'Герой нашего времени'

написал М.Ю. Лермонтов

Заметим, что мы не изменили значений у элементов массива. Чтобы их изменить, надо было передавать значения в переменную $val функции try_walk по ссылке.

<?php

$books1 = array(

'А.С. Пушкин'=>'Руслан и Людмила',

'Л.Н. Толстой'=>'Война и мир',

'М.Ю. Лермонтов'=>'Герой нашего времени');

// создаем функцию, которую хотим

// применить к элементам массива

function try_walk(&$val,$key){

$key = '<p>Автор: ' .$key .'<br>';

$val = 'Название: '' . $val .''</p>';

echo $key.$val;

}

// применяем ко всем элементам массива

// $book1 функцию try_walk

array_walk($books1,'try_walk');

print_r($books1);

?>

В результате работы скрипта получим:

Автор: А.С. Пушкин

Название: 'Руслан и Людмила'

Автор: Л.Н. Толстой

Название: 'Война и мир'

Автор: М.Ю. Лермонтов

Название: 'Герой нашего времени'

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату