Язык программирования PHP - [34]

Шрифт
Интервал


Если необходимо работать с реальными значениями массива, а не с их копиями, следует передавать аргумент в функцию по ссылке. Однако нужно иметь в виду, что нельзя добавлять или удалять элементы массива и производить действия, изменяющие сам массив, поскольку в этом случае результат работы 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(

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

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

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

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

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

>function try_walk(&$val,$key){

> $key = "

Автор: " .$key ."
";

> $val = "Название: \"" . $val ."\"

";

> echo $key.$val;

>}

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

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

>array_walk($books1,"try_walk");

>print_r($books1);

>?>



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


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

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

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

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

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

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

>Array ( [А.С. Пушкин] =>

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

> [Л.Н. Толстой] =>

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

> [М.Ю. Лермонтов] =>

> Название: "Герой нашего времени")



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


Функция array_slice


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


>array_slice (массив,

> номер_элемента [, длина])


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


>

>$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, то будет выделен подмассив, имеющий ровно столько элементов, сколько задано этим параметром. Длину можно указывать и отрицательную. В этом случае интерпретатор удалит с конца массива число элементов, равное модулю параметра длина.


>

>$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, то при разбиении будут сохранены ключи исходного массива. В противном случае ключи элементов заменяются числовыми индексами, которые начинаются с нуля.


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


>

>$persons = array("Иванов", "Петров",

> "Сидорова","Зайцева", "Волкова");

>$triples = array_chunk($persons,3);

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

> // по три элемента

>foreach ($triples as $k => $table){

> // выводим полученные тройки

> echo "За столиком номер $k сидят:

    ";

    > foreach ($table as $pers)

    > echo "

  • $pers";

    > echo "

";

>}

>?>



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


>за столиком номер 0 сидят:

>• Иванов

>• Петров

>• Сидорова

>за столиком номер 1 сидят:

>• Зайцева

>• Волкова



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


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


Рекомендуем почитать
Сочинения гр. А. К. Толстого как педагогический материал. Часть 2. Эпические мотивы

«Лирика обладает одним несомненным преимуществом перед другими родами поэзии: она лучше всего освещает нам личный мир поэта, ту сферу, которую выделяет для него в широком Божьем мире его темперамент, обстановка, симпатии, верования; она показывает степень отзывчивости поэта; т.е. его способности переживать разнородные душевные состояния: она часто открывает нам уголки поэтической деятельности, где живут не оформившиеся еще образы, задатки для определенных фигур эпоса и драмы. В эпосе и драме образы становятся разнообразнее и пестрее, но вместе с тем славятся объективнее, особенно в драме…».


Уголовное право. Особенная часть

В книге кратко изложены ответы на основные вопросы темы «Уголовное право. Особенная часть». Издание поможет систематизировать знания, полученные на лекциях и семинарах, подготовиться к сдаче экзамена или зачета.Пособие адресовано студентам высших и средних образовательных учреждений, а также всем интересующимся данной тематикой.


Самоучитель Adobe After Effects 6.0

Обучение созданию профессиональных видеофильмов и обработки их на компьютере представлено в виде 12 уроков. Рассматривается, как с помощью программы Adobe After Effects можно редактировать и рисовать последовательность кадров, добавлять титры и заголовки, применять различные видеоэффекты, редактировать звуковое сопровождение фильма. Описывается процесс настройки прозрачности и наложения слоев видео для последующего экспорта фильма в различных форматах. Показываются способы создания анимации при масштабировании, поворотах и в движении с наложением титров и спецэффектов.


Финансовое право

В учебном пособии в краткой и доступной форме рассмотрены все основные вопросы, предусмотренные государственным образовательным стандартом и учебной программой по дисциплине «Финансовое право».Книга позволит быстро получить основные знания по предмету, а также качественно подготовиться к зачету и экзамену.Рекомендуется студентам, аспирантам и преподавателям по юридическим, экономическим и управленческим специальностям, а также сотрудникам банков.Автор книги, Шевчук Денис Александрович, имеет опыт преподавания различных дисциплин в ведущих ВУЗах Москвы (экономические, юридические, технические, гуманитарные), два высших образования (экономическое и юридическое), более 30 публикаций (статьи и книги), Член Союза Юристов Москвы, Член Союза Журналистов России, Член Союза Журналистов Москвы, Стипендиат Правительства РФ, опыт работы в банках, коммерческих и государственных структурах (в т.ч.


Следственные действия: психология, тактика, технология

Книга посвящена правовым, психологическим и криминалистическим основам следственных действий как процессуальных способов доказывания по уголовным делам. Рассмотрены общая характеристика следственного действия, психологические условия и приёмы повышения их эффективности, даны рекомендации по подготовке и проведению отдельных видов основных следственных действий, регламентируемых ныне действующим УПК РФ.Для работников правоохранительных органов, студентов, аспирантов, докторантов, профессорско-преподавательского состава юридических учебных заведений.


фгос  ответы

Содержащиеся в пособии контрольно-измерительные материалы (КИМы) для 5 класса, аналогичные материалам ЕГЭ, составлены в соответствии с программой общеобразовательных учреждений по русскому языку и учитывают возрастные особенности учащихся. В конце пособия даны ответы на все варианты тестов, предложены диктанты различных типов.Пособие адресовано учителям, ученикам, их родителям и всем, кому необходимо закрепить и систематизировать знания перед ЕГЭ.