Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Применение функции ко всем элементам массива




Функция array_walk(массив, функция [, данные]) применяет созданную пользователем функцию ко всем элементам массива массив и возвращает true в случае успешного выполнения операции и false – в противном случае.

Пользовательская функция, как правило, имеет два аргумента, в которые поочередно передаются значение и ключ каждого элемента массива. Но если при вызове функции array_walk() указан третий аргумент, то он будет рассмотрен как значение третьего аргумента пользовательской функции, смысл которого определяет сам пользователь. Если функция пользователя требует больше аргументов, чем в нее передано, то при каждом вызове array_walk() будет выдаваться предупреждение.

Если необходимо работать с реальными значениями массива, а не с их копиями, следует передавать аргумент в функцию по ссылке. Однако нужно иметь в виду, что нельзя добавлять или удалять элементы массива и производить действия, изменяющие сам массив, поскольку в этом случае результат работы array_walk() считается неопределенным.

<?php$books1 = array("А.С. Пушкин"=>"Руслан и Людмила", "Л.Н. Толстой"=>"Война и мир", "М.Ю. Лермонтов"=>"Герой нашего времени");// создаем функцию, которую хотим // применить к элементам массива function try_walk($val,$key,$data){ echo "$data \"$val\" написал $key<br>";}// применяем ко всем элементам массива // $books1 функцию try_walkarray_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);?>

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

Автор: А.С. ПушкинНазвание: "Руслан и Людмила"Автор: Л.Н. ТолстойНазвание: "Война и мир"Автор: М.Ю. ЛермонтовНазвание: "Герой нашего времени"Array ([А.С. Пушкин] => Название: "Руслан и Людмила" [Л.Н. Толстой] => Название: "Война и мир" [М.Ю. Лермонтов] => Название: "Герой нашего времени")

Выделение подмассива

Функция array_slice

Поскольку массив – это набор элементов, вполне вероятно, потребуется выделить из него какой-нибудь поднабор. В PHP для этих целей есть функция array_slice. Ее синтаксис таков:

array_slice (массив, номер_элемента [, длина])

Эта функция выделяет подмассив длины длина в массиве массив, начиная с элемента, номер которого задан параметром номер_элемента. Положительный номер_элемента указывает на порядковый номер элемента относительно начала массива, отрицательный – на номер элемента с конца массива.

<?php$arr = array(1,2,3,4,5);$sub_arr = array_slice($arr,2);print_r($sub_arr); /* выведет Array ([0] => 3 [1] =>4 [2] => 5),т.е. подмассив, состоящий из элементов 3, 4, 5 */$sub_arr = array_slice($arr,-2);print_r($sub_arr); // выведет Array ([0] => 4 [1] => 5), // т.е. подмассив, из элементов 4, 5?>

Если задать параметр длина при использовании array_slice, то будет выделен подмассив, имеющий ровно столько элементов, сколько задано этим параметром. Длину можно указывать и отрицательную. В этом случае интерпретатор удалит с конца массива число элементов, равное модулю параметра длина.

<?php$arr = array(1,2,3,4,5);$sub_arr = array_slice($arr, 2, 2); // содержит массив из элементов 3, 4$sub = array_slice($arr,-3, 2); // тоже содержит массив из элементов 3, 4$sub1 = array_slice($arr,0, -1); // содержит массив из // элементов 1, 2, 3, 4$sub2 = array_slice($arr,-4, -2); // содержит массив из элементов 2, 3?>

Функция array_chunk

Есть еще одна функция, похожая на array_slice() – это array_chunk(). Она разбивает массив на несколько подмассивов заданной длины. Синтаксис ее такой:

array_chunk (массив, размер [, сохранять_ключи])

В результате работы array_chunk() возвращает многомерный массив, элементы которого представляют собой полученные подмассивы. Если задать параметр сохранять ключи как true, то при разбиении будут сохранены ключи исходного массива. В противном случае ключи элементов заменяются числовыми индексами, которые начинаются с нуля.

Пример У нас есть список приглашенных, оформленный в виде массива их фамилий. У нас имеются столики на три персоны. Поэтому нужно распределить всех приглашенных по трое.

<?php$persons = array("Иванов", "Петров", "Сидорова","Зайцева", "Волкова");$triples = array_chunk($persons,3); // делим массив на подмассивы // по три элементаforeach ($triples as $k => $table){ // выводим полученные тройки echo "За столиком номер $k сидят: <ul>"; foreach ($table as $pers) echo "<li>$pers"; echo "</ul>";}?>

В результате получим:

за столиком номер 0 сидят:• Иванов• Петров• Сидороваза столиком номер 1 сидят:• Зайцева• Волкова

Сумма элементов массива

В этом разделе мы познакомимся с функцией, вычисляющей сумму всех элементов массива. Сама задача вычисления суммы значений массивапредельно проста. Но зачем писать лишний раз один и тот же код, если можно воспользоваться специально созданной и всегда доступной функцией. Функция эта называется, как можно догадаться, array_sum(). И в качестве параметра ей передается только имя массива, сумму значений элементовкоторого нужно вычислить.

В качестве примера использования этой функции приведем решение более сложной задачи, чем просто вычисление суммы элементов. Этот пример также иллюстрирует применение функции array_slice(), которую мы обсуждали чуть раньше.

Пример. Пусть дан массив натуральных чисел. Нужно найти в нем такое число, что сумма элементов справа от него равна сумме элементовслева от него.

<?php//массив задается функцией array$arr = array(2,1,3,4,5,6,4);// перебираем каждый элемент массива $arr.// Внутри цикла текущий ключ массива // содержится в переменной $k,// текущее значение – в переменной $valforeach ($arr as $k => $val){ $p = $k + 1;// синтаксис array array_slice (// array array,int offset [,int length])// array_slice выделяет подмассив // длины length в массиве array, // начиная с элемента offset. $out_next = array_slice($arr,$p); // получаем массив элементов, // идущих после текущего $out_prev = array_slice($arr,0,$k); // получаем массив элементов, // идущих перед текущим// функция mixed array_sum (array array) // подсчитывает сумму элементов массива array $next_sum = array_sum($out_next); $prev_sum = array_sum($out_prev);// если сумма элементов до текущего равна // сумме элементов после, то выводим // значение текущего элемента if ($next_sum==$prev_sum) echo "value:$val";// можно посмотреть, что представляют собой // рассмотренные массивы на каждом шаге// print_r($out_next); echo "<br>";// print_r($out_prev);// echo "$next_sum, $prev_sum<br>"; echo "<hr>";}?>

 





Поделиться с друзьями:


Дата добавления: 2016-12-29; Мы поможем в написании ваших работ!; просмотров: 398 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Свобода ничего не стоит, если она не включает в себя свободу ошибаться. © Махатма Ганди
==> читать все изречения...

2306 - | 2069 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.