Язык программирования 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(). И в качестве параметра ей передается только имя массива, сумму значений элементов которого нужно вычислить.


Рекомендуем почитать
Половая идентификация ребенка в кинетическом рисунке семьи

Здоровые семейные отношения – это залог успешной полоролевой идентификации ребёнка. Начинаясь с рождения, процесс идентификации протекает непрерывно, с заострениями и актуализациями переживаний на кризисных этапах психосексуального развития. Одним из таких этапов является возраст эдипова комплекса. Конфликты и искажения воспитательного процесса на этом этапе никогда не проходят бесследно и могут с новой силой реанимироваться уже в подростковом возрасте. В пособии представлены основные критерии анализа и подходы к пониманию проблем половой идентификации ребёнка с помощью популярной рисуночной методики.


Искусство Древней Греции и Рима: учебно-методическое пособие

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


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

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


История русской литературы XX века (20–90–е годы). Основные имена

Книга является пособием по истории русской литературы XX века (20-90-е годы). Она представляет собой первый том, за которым последует продолжение — «Литературный процесс» (в двух частях). Пособие призвано отразить современный научный взгляд на основные художественные ценности и тенденции развития русской литературы XX века.Издание предназначено для студентов филологических факультетов российских университетов, а также для аспирантов и преподавателей, — всех, кто занимается русской литературой.


Материаловедение

Данный конспект лекций предназначен для студентов высших и средних специальных учебных заведений. В него входят сведения о древесине и древесных материалах, описываются их основные свойства. Дается характеристика металлов и сплавов, рассматриваются способы их применения. Приводятся основные сведения о лакокрасочных, смазочных, облицовочных материалах, а также классификация клеев и области их назначения.


Микроэкономика

В данном конспекте лекций в доступной форме изложены все основные вопросы по дисциплине «микроэкономика».Книга поможет получить основные знания и подготовиться к зачету или экзамену. Рекомендуется студентам экономических специальностей.