Вы находитесь на странице: 1из 13

Работа с массивами

Теоретическая часть 1
В программировании очень часто возникает задача хранения списка похожих значений,
например, всех дней недели или всех месяцев. Можно было бы создавать под каждое значение списка
свою переменную, но это очень неудобно и долго - для списка дней недели понадобилось бы 7
переменных, а для месяцев - вообще 12.
А теперь представьте, что вам нужно вывести на экран название третьего месяца. С помощью 12-
ти различных переменных это было бы проблематично, так как вам необходимо помнить названия всех
переменных, в которые вы записали имена месяцев. Поэтому для таких вещей был изобретен
специальный тип данных. Он называется массив.
Массив создается с помощью функции []:
<?php
$a = []; //создаем массив $a
?>
Пока созданный нами массив не содержит никаких данных. Заполним его названиями дней
недели (для краткости пишу две буквы каждого дня):
<?php
$a = ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'];
?>
Каждое значение списка, который мы записали в массив (в нашем случае каждый день недели),
называется элементом массива. Элементы разделяются между собой запятой. После этой запятой
можно ставить пробелы, а можно и не ставить.
Обратите внимание на то, что названия дней недели представляют собой строки и
поэтому взяты в кавычки. Кроме строк в массиве можно хранить числа, и их в кавычки мы не берем:
<?php
//В массиве можно хранить как строки, так и числа:
$a = ['пн', 256, 'ср', 34, 38, 'сб', 95];
?>
Посмотреть содержимое массива с помощью echo мы, увы, не сможем. Попробуйте сделать так:
<?php
//Пробуем вывести с помощью echo содержимое массива $a:
$a = ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'];
echo $a;
?>
Вы увидите на экране слово Array вместо содержимого массива.
Для того, чтобы PHP вывел нам все элементы массива, нужно воспользоваться
функцией var_dump:
<?php
//Пробуем вывести с помощью var_dump содержимое массива $a:
$a = ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'];
var_dump($a);
?>
Вот теперь мы действительно увидим все элементы нашего массива.

Как вывести отдельный элемент массива


Итак, массив месяцев мы составили и даже научились смотреть на него функцией var_dump.
Однако, полезного пока мало, так как var_dump используется для отладки кода и выводит весь массив
целиком.
Предположим, мы хотим вывести на экран среду. Делается это так: нужно после переменной
массива (в нашем случае $a) написать квадратные скобки [ ], а в них указать порядковый номер
элемента, который мы хотим вывести: $a[3]. Казалось бы, что порядковый номер среды - это 3, но это
не так. Потому что в программировании нумерация начинается с нуля. Поэтому 0 - это понедельник,
1 - это вторник, а 2 - это среда.
Пример:
<?php
//Выведем слово 'ср':
$a = ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'];
echo $a[2];
?>

Ассоциативный массив
Чтобы обратиться к нужному элементу массива, мы писали в квадратных скобках его
порядковый номер (нумерация начинается с нуля, если вы уже забыли). Эти порядковые номера
называются ключами массива. То есть мы получали значение элемента массива по его ключу.
В нашем случае PHP сам определял ключи для элементов - это были их порядковые номера.
Иногда это может оказаться неудобным - мы хотим вывести на экран название третьего дня недели
(среду), а должны писать в квадратных скобках цифру 2.
Поэтому в PHP можно указать ключи в явном виде – так, как нам нужно. Сделаем так,
чтобы понедельник имел ключ 1, а не ноль, как было раньше (и всем остальным дням прибавим
единицу):
<?php
//Укажем ключи в явном виде:
$a = [1=>'пн', 2=>'вт', 3=>'ср', 4=>'чт', 5=>'пт', 6=>'сб', 7=>'вс'];
echo $a[1]; //выведет 'пн'
?>
Синтаксис здесь такой: ключ, затем идет стрелка =>, а потом значение.
Ключи не обязательно должны быть числами, они могут быть и строками. Сделаем массив, в
котором ключами будут имена работников, а элементами - их зарплаты:
<?php
//Массив работников:
$a = ['Коля'=>200, 'Вася'=>300, 'Петя'=>400];
?>
Узнаем зарплату Васи:
<?php
$a = ['Коля'=>200, 'Вася'=>300, 'Петя'=>400];
echo $a['Вася']; //выведет 300
?>
Массивы, у которых явно указаны ключи, называются ассоциативными.

Хитрость с ключами
Когда мы делали ассоциативный массив дней недели, нам приходилось
расставлять все ключи вручную. И все для того, чтобы нумерация началась не с нуля, а с единицы. Это
было немного неудобно.
Напомню вам этот массив:
<?php
//Укажем ключи в явном виде:
$a = [1=>'пн', 2=>'вт', 3=>'ср', 4=>'чт', 5=>'пт', 6=>'сб', 7=>'вс'];
echo $a[3]; //выведет 'ср'
?>
На самом деле нет необходимости расставлять ключи всем элементам - достаточно только
первому элементу поставить ключ 1. Если у второго элемента не будет ключа, PHP поставит
его автоматически, причем следующий по порядку. А следующим номером будет как раз-таки число 2,
так как предыдущий элемент имел ключ 1 (неважно, что мы сами его поставили, а не PHP
автоматически).
Давайте поправим наш массив:
<?php
//Укажем ключи в явном виде:
$a = [1=>'пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'];
echo $a[3]; //выведет 'ср'
?>
Итак, этот массив с одним нашим ключом фактически будет таким же, как и массив со всеми ключами,
но сделать его проще - ключ ставится только первому элементу, а не всем.

Как еще можно создать массив


Объявление массива с помощью команды [] не является единственным способом его создания.
Можно просто присвоить значения элементам массива, не объявляя его через array (PHP нас поймет и
сам создаст массив):
<?php
//Можно не писать [], а просто присвоить значения его элементам:
$a[0] = 1;
$a[1] = 2;
$a[2] = 3;
var_dump($a); //с помощью var_dump убеждаемся в том, что $a – это массив
?>
Естественно, ключи могут быть не только числовыми, но и текстовыми:
<?php
//Ключи могут быть строками:
$a['Коля'] = 100;
$a['Вася'] = 200;
$a['Петя'] = 300;
var_dump($a); //с помощью var_dump убеждаемся в том, что $a – это массив
?>
Кроме того, можно сделать так, что PHP сам добавит ключи (начиная с нуля и так далее). Для этого мы
оставим квадратные скобки пустыми: $a[] = 1, а PHP сам добавит ключ. Пример:
<?php
//Мы не пишем ключи в квадратных скобках
$a[] = 100; //100 будет иметь ключ 0
$a[] = 200; //200 будет иметь ключ 1
$a[] = 300; //300 будет иметь ключ 1
var_dump($a); //массив $a будет иметь вид [0=>100, 1=>200, 2=>300]
?>

Практическая часть 1

Задание 1. Запишите в тетрадь способы создания массива


<?php
//Можно просто его объявить:
$a = [];

//Можно его сразу и заполнить:


$a = [1, 2, 3];

//Можно не писать [], а просто присвоить значения его элементам:


$a[0] = 1;
$a[1] = 2;
$a[2] = 3;

//Можно даже не писать ключи, тогда PHP добавит их автоматически, начиная с нуля:
$a[] = 1;
$a[] = 2;
$a[] = 3;
?>
Задание 2. Создайте массив $arr=['a', 'b', 'c']. Выведите значение массива на экран с помощью
функции var_dump().

Задание 3. С помощью массива $arr из предыдущего номера выведите на экран содержимое первого,
второго и третьего элементов.

Задание 4. Создайте массив $arr=['a', 'b', 'c', 'd'] и с его помощью выведите на экран строку 'a+b, c+d'.

Задание 5. Создайте массив $arr с элементами 2, 5, 3, 9. Умножьте первый элемент массива на второй, а
третий элемент на четвертый. Результаты сложите, присвойте переменной $result. Выведите на экран
значение этой переменной.

Задание 6. Заполните массив $arr числами от 1 до 5. Не объявляйте массив, а просто заполните его
присваиванием $arr[] = новое значение.

Задание 7. Создайте массив $arr. Выведите на экран элемент с ключом 'c'. Найдите сумму элементов
этого массива.
$arr = ['a'=>1, 'b'=>2, 'c'=>3];
Задание 8. Создайте массив заработных плат $arr. Выведите на экран зарплату Пети и Коли.
$arr = ['Коля'=>'1000$', 'Вася'=>'500$', 'Петя'=>'200$'];
Задание 9. Создайте ассоциативный массив дней недели. Ключами в нем должны служить номера дней
от начала недели (понедельник - должен иметь ключ 1, вторник - 2 и т.д.). Пусть теперь номер дня
недели хранится в переменной $day, например там лежит число 3. Выведите день недели,
соответствующий значению переменной $day.

Теоретическая часть 2
Многомерный массив
Элементы массива могут быть не только строками и числами, но и массивами. То есть у нас
получится массив массивов или многомерный массив.
Давайте сделаем массив студентов $students, который будет содержать два подмассива: студенты
мужского пола и женского:
<?php
//Многомерный массив студентов:
$a = [
'boys' => ['Коля', 'Вася', 'Петя'],
'girls' => ['Даша', 'Маша', 'Лена'],
];
?>
Чтобы вывести какой-либо элемент из многомерного массива следует писать уже не одну пару [
], а две: $a['boys'][0] – так мы выведем 'Коля'.

Практическая часть 2
Задание 1. Создайте многомерный массив $arr. С его помощью выведите на экран
слова 'joomla', 'drupal', 'зеленый', 'красный'.
$arr = [
'cms'=>['joomla', 'wordpress', 'drupal'],
'colors'=>['blue'=>'голубой', 'red'=>'красный', 'green'=>'зеленый']
];
Задание 2. Создайте двухмерный массив. Первые два ключа - это 'ru' и 'en'. Пусть первый ключ
содержит элемент, являющийся массивом названий дней недели по-русски, а второй - по-английски.
Выведите с помощью этого массива понедельник по-русски и среду по английски (пусть понедельник -
это первый день).
Задание 3. Пусть теперь в переменной $lang хранится язык (она принимает одно из значений или 'ru',
или 'en' - либо то, либо то), а в переменной $day - номер дня. Выведите словом день недели,
соответствующий переменным $lang и $day. То есть: если, к примеру, $lang = 'ru' и $day = 3 - то
выведем 'среда'.

Теоретическая часть 3
Функции для работы с массивами
Назначение Синтаксис Пример
Функция count подсчитывает count(массив); <?php $arr = ['a', 'b', 'c', 'd'];
количество элементов массива. echo count($arr);
?>
Функция вернула количество
элементов массива.
Результат выполнения: 4
Функция range создает массив с range(откуда, докуда, [шаг]); Пример 1.
диапазоном элементов. К примеру, <?php $arr = range(1, 5);
можно создать массив, заполненный var_dump($arr); ?>
числами от 1 до 100 или буквами от 'a' до Создает массив: [1, 2, 3, 4, 5]
'z'. Диапазон, который сгенерирует Пример 2.
функция, задается параметрами: первый <?php $arr = range(5, 1);
параметр откуда генерировать, а второй var_dump($arr); ?>
- докуда. Результат выполнения: [5, 4, 3, 2,
1]

Функция array_sum вычисляет сумму array_sum(массив); <?php


элементов массива. $arr = [1, 2, 3, 4, 5];
echo array_sum($arr);
?>
Результат выполнения: 15
Функция array_product вычисляет array_product(массив); <?php
произведение (умножение) элементов $arr = [1, 2, 3, 4, 5];
массива. echo array_product($arr);
?>
Результат выполнения:120
Функция array_slice отрезает и array_slice(массив, откуда Пример 1
возвращает часть массива. При этом сам отрезать, [сколько], <?php
массив не меняется. Первым параметром [сохранять ключи = false]); $arr = ['a', 'b', 'c', 'd', 'e'];
указывается массив для разрезания. var_dump(array_slice($arr, 0, 3));
Вторым параметром указывается, с ?>
какого элемента начинать отрезание, а Результат выполнения: ['a', 'b', 'c'],
третьим - сколько элементов отрезать. т.е. вырезает элементы с первого
Третий параметр может быть три штуки
отрицательным - в этом случае отсчет
начнется с конца (-1 - последний Пример 2
элемент, -2 - предпоследний и так далее). <?php
Третий параметр можно вообще не $arr = ['a', 'b', 'c', 'd', 'e'];
указывать - в этом случае массив var_dump(array_slice($arr, 1, 3));
отрежется до самого конца. ?>
Результат выполнения: ['b', 'c', 'd'],
Последний необязательный параметр
т.е. вырезает элементы со второго
регулирует сохранять ли ключи при
три штуки
отрезании, true - сохранять, false (по
умолчанию) - не сохранять.
Пример 3
<?php
$arr = ['a', 'b', 'c', 'd', 'e'];
var_dump(array_slice($arr, 1));
?>
Результат выполнения: ['b', 'c', 'd',
'e'], то есть вырезает со второго до
конца массива, поэтому третий
параметр не указан
Функция array_merge сливает два и array_merge(первый массив, <?php
более массивов вместе. второй массив...); $arr1 = [1, 2, 3];
$arr2 = ['a', 'b', 'c'];
Если в сливаемых массивах встречаются
$res = array_merge($arr1, $arr2);
одинаковые ключи - останется только
var_dump($res);
один из таких элементов.
?>
Если вам нужно, чтобы остались все Результат выполнения: [1, 2, 3, 'a',
элементы с одинаковыми ключами - 'b', 'c']
используйте array_merge_recursive(первый
функцию array_merge_recursive. массив, второй массив...);
Функция array_reverse переворачивает array_reverse(массив, Пример 1
массив в обратном порядке. [сохранять ли ключи]); <?php
$arr = [1, 2, 3, 4, 5];
Первым параметром передается массив,
$arr = array_reverse($arr);
а вторым - сохранять ключи при
var_dump($arr);
перестановке элементов или нет (true -
?>
да, false - нет).
Результат выполнения: [5, 4, 3, 2,
Второй параметр указывать 1]
необязательно. В таком случае по
умолчанию вторым параметром является Пример 2
false. <?php
$arr = ['a'=>1, 'b'=>2, 'c'=>3,
'd'=>4, 'e'=>5];
$arr = array_reverse($arr);
var_dump($arr);
?>
Результат выполнения: ['a'=>5,
'b'=>4, 'c'=>3, 'd'=>2, 'e'=>1], т.е. по
умолчанию ключи отрвутся от
элементов
Функция array_keys получает ключи array_keys(массив); <?php
массива и записывает их в новый $arr = ['a'=>1, 'b'=>2, 'c'=>3,
массив. 'd'=>4, 'e'=>5];
var_dump(array_keys($arr));
?>
Результат выполнения:
['a', 'b', 'c', 'd', 'e']
Функция array_values выбирает все array_values(массив); <?php
значения из массива. $arr = ['a'=>1, 'b'=>2, 'c'=>3,
'd'=>4, 'e'=>5];
var_dump(array_values($arr));
?>
Результат выполнения:
[1, 2, 3, 4, 5]
Функция array_combine осуществляет array_combine(массив <?php
слияние двух массивов в один ключей, массив значений); $keys = ['green' ,'blue' ,'red'];
ассоциативный. $elems = ['зеленый', 'голубой',
'красный'];
Первым параметром функция принимает
$arr = array_combine($keys,
массив будущих ключей, а вторым -
$elems); var_dump($arr);
массив будущих значений. ?>
Результат выполнения:
['green'=>'зеленый',
'blue'=>'голубой', 'red'=>'красный']
Функция array_search осуществляет array_search(что ищем, где <?php
поиск значения в массиве и возвращает ищем, [сравнивать по типу = $arr = ['a', 'b', 'c', 'd', 'e'];
ключ первого найденного элемента. false]); echo array_search('c', $arr));
Если такой элемент не найдет - вернет ?>
false. Третий параметр задает строгое Результат выполнения: 2
сравнение по типу (как по ===). Если
поставить true - он будет сравнивать
строго, а если false (по умолчанию) - то
нет.
Функция array_count_values производит array_count_values(массив); <?php
подсчет количества всех значений $arr = ['a', 'a', 'a', 'b', 'b', 'c'];
массива. Возвращает ассоциативный var_dump(array_count_values($arr));
массив, в котором ключами будут ?>
элементы массива, а значениями - их Результат выполнения:
количество в массиве. ['a'=>3, 'b'=>2, 'c'=>1]
Функция array_unique осуществляет array_unique(массив); <?php
удаление повторяющихся элементов $arr = [1, 1, 1, 2, 2, 3];
(дублей) из массива. $arr = array_unique($arr);
var_dump($arr);
?>
Результат выполнения:
[1, 2, 3]
Функция array_rand возвращает array_rand(массив, [сколько <?php
случайный ключ из массива. ключей выбрать]); $arr = ['a'=>1, 'b'=>2, 'c'=>3,
'd'=>4, 'e'=>5];
Второй необязательный параметр
$key = array_rand($arr);
указывает, сколько случайных ключей
var_dump($arr[$key]);
следует вернуть.
?>
Если он не указан - возвращается один Результат выполнения: 3, т.е.
ключ, а если указан - заданное вернет случайный элемент из
количество ключей в виде массива. массива, зная случайный ключ
Функция array_key_exists проверяет array_key_exists(ключ <?php
присутствие указанного ключа в который нужно проверить, $arr = ['a'=>1, 'b'=>2];
массиве. массив в котором проверять); $result = array_key_exists('a',
$arr));
var_dump(result);
?>
Результат выполнения: true
Функция in_array проверяет наличие in_[что искать, в каком <?php
заданного элемента в массиве. массиве]; $arr = [1, 2, 3, 4, 5];
var_dump(in_[3, $arr]);
?>
Результат выполнения: true
Функция compact сливает содержимое compact(имена переменных); <?php
переменных в ассоциативный массив, $city = 'Минск';
где ключами будут названия этих $country = 'Беларусь';
переменных. $year = 2010;
$result = compact('city', 'country',
'year');
var_dump($result);
?>
Результат выполнения:
['city'=>'Минск',
'country'=>'Беларусь', 'year'=>2010]
Функция extract извлекает элементы extract(массив); <?php
ассоциативного массива в переменные. $arr = ['name'=>'Иван', 'age'=>25];
Именами переменных будут служить extract($arr);
ключи ассоциативного массива. ?>
Результат выполнения:
В результате будет доступная
переменная $name и переменная
$age
<?php
var_dump($name); //выведет
'Иван'
var_dump($age); //выведет 25
?>
Функция array_shift вырезает и array_shift(массив); <?php
возвращает первый элемент массива. $arr = [1, 2, 3, 4, 5];
При этом этот элемент исчезает из echo array_shift($arr);
массива. ?>
Результат выполнения: 1. Сам
массив останется [2, 3, 4, 5]
Функция array_pop вырезает и array_pop(массив); <?php
возвращает последний элемент массива. $arr = [1, 2, 3, 4, 5];
При этом этот элемент исчезает из echo array_pop($arr);
массива. ?>
Результат выполнения: 5. Массив
останется [1, 2, 3, 4]
Функция array_unshift добавляет array_unshift(массив, какие <?php
элементы в начало массива. элементы добавить); $arr = [1, 2, 3];
$num = array_unshift($arr, 'a', 'b');
Функция изменяет переданный массив, а
var_dump($arr);
возвращает новое количество элементов
?>
в массиве.
Результат выполнения:
['a', 'b', 1, 2, 3]
В переменной $num будет лежать
новое количество элементов
массива: 5
Функция array_push добавляет array_push(массив к <?php
элементы в конец массива. которому добавить $arr = [1, 2, 3];
элементы, какие элементы $num = array_push($arr, 4, 5);
Функция изменяет переданный массив, а
добавить); var_dump($arr);
возвращает новое количество элементов
?>
в массиве.
Результат выполнения:
[1, 2, 3, 4, 5]
Функция array_replace заменяет array_replace(массив, <?php
значения первого массива значениями с массив, массив...); $arr = ['a', 'b', 'c', 'd', 'e'];
такими же ключами из других $result = array_replace($arr,
переданных массивов. Если ключ из [0=>'!', 2=>'!!']));
первого массива присутствует во втором var_dump($result);
массиве, его значение заменяется на
?>
значение из второго массива. Если ключ
есть во втором массиве, но отсутствует в Результат:
первом - он будет создан в первом ['!', 'b', '!!', 'd', 'e']
массиве. Если ключ присутствует только
в первом массиве, то сохранится как
есть.
Если для замены передано несколько
массивов, они будут обработаны в
порядке передачи и более поздние
массивы будут перезаписывать значения
из предыдущих.
Для сортировки массивов в PHP sort(массив); <?php
существует несколько функций: sort - по $arr = [1, 3, 2, 5, 4];
возрастанию элементов, rsort - по sort($arr);
убыванию элементов, asort - по var_dump($arr);
возрастанию элементов с сохранением ?>
ключей, arsort - по убыванию элементов Результат выполнения:
с сохранением ключей, ksort - по [1, 2, 3, 4, 5]
возрастанию ключей, krsort - по
убыванию ключей, usort - по функции
по элементам, uasort - по функции по
элементам с сохранением
ключей, uksort - по функции по
ключам, natsort - натуральная
сортировка.
Все эти функции изменяют сам массив -
это значит, что результат не нужно
никуда присваивать: поменяется сам
массив.
Эта функция перемещает элементы shuffle();
массива в случайном порядке.

Практическая часть 3
Задание 1. Дан массив $arr, заполненный случайными числами . С помощью
функции count выведите последний элемент данного массива.

Задание 2. Дан массив с числами. Проверьте, что в нем есть элемент со значением 3.

Задание 3. С помощью фугкции range создайте массив, заполненный числами от 1 до n. С помощью


функций array_sum и count найдите среднее арифметическое элементов (сумма элементов делить на их
количество) данного массива.

Задание 4. Дан массив 'a'=>1, 'b'=>2, 'c'=>3'. Запишите в массив $keys ключи из этого массива, а
в $values – значения. Исходный массив измените так, чтобы элементы (с их ключами) были записаны в
обратном порядке.

Задание 5. Дан массив ['a', '-', 'b', '-', 'c', '-', 'd']. Найдите позицию первого элемента '-' и удалите его с
помощью функции array_splice.

Задание 6. Дан массив ['a', 'b', 'c', 'd', 'e']. Поменяйте элемент с ключом 0 на '!', а элемент с ключом 3 - на
'!!'.

Задание 7. Дан массив с элементами 'a'=>1, 'b'=>2, 'c'=>3. Выведите на экран


случайный элемент данного массива

Задание 8. Заполните массив числами от 1 до 25 с помощью range, а затем перемешайте его элементы в
случайном порядке.

Задание 9. Сделайте строку длиной 6 символов, состоящую из маленьких английских букв,


расположенных в случайном порядке. Буквы не должны повторяться.
Задание 10. Дан массив с элементами 'a', 'b', 'c', 'b', 'a'. Подсчитайте сколько раз встречается каждая из
букв. Удалите повторяющиеся элементы.

Задание 11. Дан массив с элементами 1, 2, 3, 4, 5. Создайте новый массив, в котором будут лежать
квадратные корни данных элементов. Отсортируйте полученный массив в порядке убывания его
элементов.

Задание 12. Дана строка '1234567890'. Найдите сумму цифр из этой строки не используя цикл

Задание 13. Создайте массив ['a'=>1, 'b'=2... 'z'=>26] не используя цикл. Скрыть подсказку.
Подсказка: используйте функцию range два раза: чтобы сделать массив букв и массив чисел, а затем
слейте эти два массива с помощью array_combine.

Задание 14. Создайте массив вида [[1, 2, 3], [4, 5, 6], [7, 8, 9]] не используя цикл. Скрыть подсказку.
Подсказка: используйте функцию range, а затем array_chunk.

Теоретическая часть 4
Цикл перебора массива
Цикл foreach используется для прохождения по всем элементам массива.
Синтаксис такой: пишется ключевое слово foreach, а после него круглые скобки ( ). В этих
скобках указывается переменная, в которой лежит массив, потом слово as, а после него - переменная, в
которую при каждом проходе цикла будет ложится элемент массива.
К примеру, это может выглядеть так - foreach($arr as $elem), где $arr - это массив, а в
переменную $elem будут ложиться элементы массива. Имя переменной $elem вы придумываете сами в
момент создания цикла - какое придумаете, в ту переменную и будут попадать элементы массива.
После команды foreach() должны идти фигурные скобки {}. Код, который лежит в этих скобках,
называется телом цикла.
Этот код будет выполняться столько раз, сколько проходов сделает цикл. А он сделает столько
проходов, сколько элементов у нашего массива.
Итак, синтаксис цикла foreach выглядит так:
<?php
foreach ($arr - имя_массива as $elem – переменная_для_элемента_массива) {
/*
Код, который находится между фигурными скобками будет
повторяться
столько раз, сколько элементов у массива.
*/
}
?>
Давайте решим следующую задачу: пусть дан массив $arr с пятью элементами, выведем
столбец этих элементов с помощью цикла foreach.
Будем при каждом проходе цикла выводить на экран (с помощью echo) текущий элемент массива
(тот, что лежит в переменной $elem), и ставить после него тег br, чтобы получался столбец элементов, а
не строка:
<?php
$arr = [1, 2, 3, 4, 5]; //этот массив дан
foreach ($arr as $elem)
/*
Код, который находится между фигурными скобками будет повторяться
столько раз, сколько элементов у массива (то есть 5 раз).
*/
{
/*
В переменной $elem будет лежать элемент массива,
каждый раз разный: сначала первый, потом второй...
Имя этой переменной обязательно должно отличаться от названия массива!
*/
echo $elem.'<br>';
/*
При каждом проходе цикла на экран будет выводится элемент массива,
получится столбец элементов нашего массива $arr = [1, 2, 3, 4, 5];
Этот столбец будет выглядеть так:
1
2
3
4
5
*/
}
?>
Цикл foreach - очень мощная и полезная вещь, его следует использовать в том случае, если вам
необходимо выполнить какие-либо действия с каждым элементом массива по отдельности,
например, возвести их в квадрат:
<?php
//Возведем в куб каждый элемент следующего массива:
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
/*
В переменной $elem будет лежать элемент массива,
каждый раз разный: сначала 1, потом 2...
*/
echo $elem*$elem*$elem;
}
?>
Циклом foreach можно пробегать не только по обычному массиву, но и по ассоциативному. В
таком случае после as следует указать такую конструкцию: $ключ => $элемент. В
переменной $ключ будут хранится ключи, а в переменной $элемент - соответствующие этим ключам
элементы.
Чтобы посмотреть на практике, как работать с ключами, давайте сделаем следующее - при
каждом проходе цикла будем выводить на экран ключ массива и соответствующий ему элемент через
дефис:
<?php
//Дан ассоциативный массив $arr:
$arr = ['a'=>1, 'b'=>2, 'c'=>3, 'd'=>4, 'e'=>5];
foreach ($arr as $key=>$elem) {
/*
В переменной $elem будут лежать элементы массива
сначала '1, потом 2 и так далее,
а в переменной $key будут лежать ключи массива
сначала 'a', потом 'b' и так далее:
*/
echo $key.'-'.$elem; //выведет: 'a-1', 'b-2', 'c-3' и так далее...
}
?>
Если вам нужны только значения ассоциативного массива и не нужны ключи, то $ключ=> можно не
писать:
<?php
//Массив ассоциативный, но ключи нам не нужны:
$arr = ['a'=>1, 'b'=>2, 'c'=>3, 'd'=>4, 'e'=>5];
foreach ($arr as $elem) {
echo $elem; //выведет: '1', '2', '3' и так далее...
}
?>
Фигурные скобки, так же, как и для if, можно не указывать - в этом случае цикл выполнит только одну
строку под ним (это относится ко всем циклам, не только к foreach):
<?php
$arr = ['a'=>1, 'b'=>2, 'c'=>3, 'd'=>4, 'e'=>5];
foreach ($arr as $elem)
echo $elem; //выведет: '1', '2', '3' и так далее...

echo 'hello'; //выведется после цикла


?>
Цикл foreach имеет альтернативный синтаксис:
<?php
//Фигурные скобки опущены, а цикл закрывается командой endforeach:
$arr = ['a'=>1, 'b'=>2, 'c'=>3, 'd'=>4, 'e'=>5];
foreach ($arr as $elem): //обратите внимание на двоеточие!
echo $elem; //выведет: '1', '2', '3' и так далее...
endforeach;
?>
Как и в случае с конструкцией if-else, мы можем разорвать скобки PHP внутри цикла,
далее написать что-то на HTML и опять открыть скобки PHP – в этом случае HTML код внутри цикла
повторится столько раз, сколько проходов сделает цикл (в случае foreach – это количество элементов
массива):
//Как работать с HTML:
<?php
$arr = ['a'=>1, 'b'=>2, 'c'=>3, 'd'=>4, 'e'=>5];
foreach ($arr as $elem) {
//HTML код внутри цикла повторится 5 раз:
?>
<!-- Мы закрыли скобки PHP и теперь пишем на HTML, но в цикле!-->
<p> {<?php echo $elem; ?>} </p>
<?php
}
?>

//Альтернативный синтаксис (удобен при работе с html, так как не нужны фигурные скобки):
<?php
$arr = ['a'=>1, 'b'=>2, 'c'=>3, 'd'=>4, 'e'=>5];
foreach ($arr as $elem): //<--- не забываем ставить двоеточие!
?>
<p> {<?php echo $elem; ?>} </p>
<?php
endforeach;
?>

Практическая часть 4

Задание 1 Дан массив с элементами 'html', 'css', 'php', 'js', 'jq'. С помощью цикла foreach выведите эти
слова в столбик.
Задание 2 Дан массив с элементами 1, 2, 3, 4, 5. С помощью цикла foreach найдите сумму квадратов
элементов этого массива. Запишите ее в переменную $result.

Задание 3 Дан массив с элементами 2, 5, 9, 15, 0, 4. С помощью цикла foreach и оператора if выведите
на экран столбец тех элементов массива, которые больше 3-х, но меньше 10.

Задание 4 Дан массив $arr. С помощью цикла foreach выведите на экран столбец ключей и элементов в
формате 'green - зеленый'.
$arr = ['green'=>'зеленый', 'red'=>'красный','blue'=>'голубой'];

Задание 5 Дан массив $arr с ключами 'Коля', 'Вася', 'Петя' и с элементами '200', '300', '400'. С
помощью цикла foreach выведите на экран столбец строк такого формата: 'Коля - зарплата 200
долларов.'.

Вам также может понравиться