создание и продвижение сайта (вбиваю в ТОП-10, как гвозди)Настройка и сопровождение платной рекламы яндекс.директ

Урок 2. Массивы в PHP

Содержание

Теория

В программировании очень часто возникает задача хранения списка похожих значений, например, всех дней недели или всех месяцев. Можно было бы создавать под каждое значение списка свою переменную, но это очень неудобно и долго (для списка дней недели понадобилось бы 7 переменных, а для месяцев - 12).

А теперь представьте, что вам нужно вывести на экран название 3-го месяца. С помощью 12 различных переменных это было бы проблематично, так как вам необходимо помнить названия всех переменных, в которые вы записали имена месяцев. Поэтому для таких вещей был изобретен специальный тип данных. Он называется массив.

Массив создается с помощью функции []:

<?$a=[]/*создаем массив $a*/?>

Пока созданный нами массив не содержит никаких данных. Заполним его названиями дней недели (для краткости пишем 2 буквы каждого дня):

<?$a=['пн','вт','ср','чт','пт','сб','вс']?>

Каждое значение списка, который мы записали в массив (в нашем случае каждый день недели), называется элементом массива.

Элементы разделяются между собой запятой. После этой запятой можно ставить пробелы, а можно и не ставить.

Обратите внимание на то, что названия дней недели представляют собой строки и поэтому взяты в кавычки. Кроме строк в массиве можно хранить числа (они в кавычки мы не берутся):

<?//В массиве можно хранить как строки, так и числа:

$a=['пн',256,'ср',34,38,'сб',95]?>

Посмотреть содержимое массива с помощью echo мы, не сможем:

<?//Пробуем вывести с помощью echo содержимое массива $a:

$a=['пн','вт','ср','чт','пт','сб','вс'];echo$a?>

На экране вместо содержимого массива видим слово Array.

Для того, чтобы PHP вывел нам все элементы массива, нужно воспользоваться функцией var_dump:

<?//Пробуем вывести с помощью var_dump содержимое массива $a:

$a=['пн','вт','ср','чт','пт','сб','вс'];var_dump($a)?>

Вот теперь мы действительно увидим все элементы нашего массива.

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

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

Итак, массив месяцев мы составили и даже научились смотреть на него функцией var_dump. Однако, полезного пока мало, так как var_dump используется для отладки кода и выводит весь массив целиком.

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

Делается это так: нужно после переменной массива (в нашем случае $a) написать квадратные скобки [], а в них указать порядковый номер элемента, который мы хотим вывести: $a[3]. Казалось бы, что порядковый номер среды - это 3, но это не так. Потому что в программировании нумерация начинается с 0. Поэтому 0 - это понедельник, 1 - это вторник, а 2 - это среда.

Посмотрите и повторите пример:

<?//Выведем слово ср:

$a=['пн','вт','ср','чт','пт','сб','вс'];echo$a[2]?>

Ассоциативный массив

Чтобы обратиться к нужному элементу массива, мы писали в квадратных скобках его порядковый номер (нумерация начинается с 0). Эти порядковые номера называются ключами массива. Т.е. мы получали значение элемента массива по его ключу.

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

<?//Укажем ключи в явном виде:
$a=[1=>'пн',2=>'вт',3=>'ср',4=>'чт',5=>'пт',6=>'сб',7=>'вс'];
echo$a[1]//выведет пн
?>

Синтаксис здесь такой: ключ, затем идет стрелка =>, а потом значение.

Ключи не обязательно должны быть числами, они могут быть и строками. Сделаем массив, в котором ключами будут имена работников, а элементами - их зарплаты:

<?//Массив работников:

$a=['Коля'=>200,'Вася'=>300,'Петя'=>400]?>

Узнаем зарплату Васи:

<?
$a=['Коля'=>200,'Вася'=>300,'Петя'=>400];
echo$a['Вася']//выведет 300
?>

Массивы, у которых явно указаны ключи, называются ассоциативными.

Хитрость с ключами

Когда мы делали ассоциативный массив дней недели, нам приходилось расставлять все ключи вручную. И все для того, чтобы нумерация началась не с 0, а с 1. Это было немного неудобно.

На самом деле нет необходимости расставлять ключи всем элементам - достаточно только 1-му элементу поставить ключ 1. Если у 2-го элемента не будет ключа, PHP поставит его автоматически, причем следующий по порядку. А следующим номером будет число 2, так как предыдущий элемент имел ключ 1 (неважно, что мы сами его поставили, а не PHP автоматически).

Исправим наш массив:

<?//Укажем ключи в явном виде:
$a=[1=>'пн','вт','ср','чт','пт','сб','вс'];
echo$a[3]//выведет ср
?>

Итак, этот массив с 1 нашим ключом фактически будет таким же, как и массив со всеми ключами, но сделать его проще - ключ ставится только 1-му элементу, а не всем.

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

Объявление массива с помощью команды [] не является единственным способом его создания. Можно просто присвоить значения элементам массива, не объявляя его через array (PHP нас поймет и сам создаст массив):

<?//Можно не писать [], а просто присвоить значения его элементам:
$a[0]=1;
$a[1]=2;
$a[2]=3;
var_dump($a)//с помощью var_dump убеждаемся в том, что $a - это массив
?>

Естественно, ключи могут быть не только числовыми, но и текстовыми:

<?//Ключи могут быть строками:
$a['Коля']=100;
$a['Вася']=200;
$a['Петя']=300;
var_dump($a)//с помощью var_dump убеждаемся в том, что $a - это массив
?>

Кроме того, можно сделать так, что PHP сам добавит ключи (начиная с 0 и так далее). Для этого мы оставим квадратные скобки пустыми: $a[]=1, а PHP сам добавит ключ. Пример:

<?//Мы не пишем ключи в квадратных скобках
$a[]=100;//100 будет иметь ключ 0
$a[]=200;//200 будет иметь ключ 1
$a[]=300;//300 будет иметь ключ 2
var_dump($a)//массив $a будет иметь вид [0=>100,1=>200,2=>300]
?>

Все способы создания массива

Итак, повторим все способы создания массива:

<?//Можно просто его объявить:
$a=[];
//Можно его сразу и заполнить:
$a=[1,2,3];
//Можно не писать [], а просто присвоить значения его элементам:
$a[0]=1;
$a[1]=2;
$a[2]=3;
//Можно даже не писать ключи, тогда PHP добавит их автоматически, начиная с 0:
$a[]=1;
$a[]=2;
$a[]=3
?>

Многомерный массив

Элементы массива могут быть не только строками и числами, но и массивами. Т.е. у нас получится массив массивов или многомерный массив.

Давайте сделаем массив студентов $students, который будет содержать 2 подмассива: студенты мужского пола и женского:

<?//Многомерный массив студентов:

$a=['boys'=>['Коля','Вася','Петя'],'girls'=>['Даша','Маша','Лена']]?>

Чтобы вывести какой-либо элемент из многомерного массива следует писать уже не 1 пару [], а 2: $a['boys'][0] - так мы выведем 'Коля'.

Практика

Примеры решения задач

Задача

Дан массив с элементами 'Привет, ', 'мир' и '!'. Необходимо вывести на экран фразу 'Привет, мир!'.

Решение:

<?/*Выведем фразу 'Привет, мир!'*/$a=['Привет, ','мир','!'];echo$a[0].$a[1].$a[2]?>

Привет, мир!

Разберем это решение.

Слово 'Привет, ' хранится под номером 0, это значит, что для доступа к нему мы должны написать $a[0].

Для доступа к слову 'мир' мы должны написать $a[1], а $a[2] содержит в себе '!'. Далее с помощью оператора 'точка' мы сложим 3 наши строки ('Привет, ', 'мир' и '!') в 1 строку таким образом: $a[0].$a[1].$a[2], и выведем на экран с помощью echo.

Задача

Решим немного другую задачу: дан массив с элементами 'Привет, ', 'мир' и '!'. Необходимо записать в переменную $text фразу 'Привет, мир!', а затем вывести на экран содержимое этой переменной.

Решение:

<?$a=['Привет, ','мир','!'];$t=$a[0].$a[1].$a[2];/*В переменной $t теперь лежит строка 'Привет, мир!'. Выведем ее на экран:*/echo$t?>

Привет, мир!

Задача

Дан массив ['Привет, ','мир','!']. Необходимо записать в 1-й элемент (т.е. элемент с номером 0) этого массива слово 'Пока, ' (т.е. вместо слова 'Привет, ' будет 'Пока, ').

Решение:
<?$a=['Привет, ','мир','!'];
$a[0]='Пока, ';//Перезапишем 1-й элемент массива
var_dump($a);//Посмотрим на массив и убедимся в том, что он изменился
?>

array(3) { [0]=> string(10) "Пока, " [1]=> string(6) "мир" [2]=> string(1) "!" }

Задача. Ассоциативные массивы

Создайте массив заработных плат $arr. Выведите на экран зарплату Пети и Коли.

<?/*Дан массив:*/$a=['Коля'=>'1000$','Вася'=>'500$','Петя'=>'200$']?>

Решение: чтобы вывести зарплату Коли следует вывести значение элемента массива с ключом 'Коля'. Сделаем это:

<?$a=['Коля'=>'1000$','Вася'=>'500$','Петя'=>'200$'];echo$a['Коля']/*Выведет 1000$*/?>

1000$

Задача. Способы создания массива

Создать массив $a с элементами 1,2,3,4,5 2-мя различными способами.

Решение:

1-й способ создать массив - объявить его через []:

<?$a=[1,2,3,4,5];var_dump($a)?>

array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }

2-й способ создания массива - это поступить таким образом:

<?$b[]=1;$b[]=2;$b[]=3;$b[]=4;$b[]=5;var_dump($b)?>

array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) }

Задача. Многомерный массив

Дан многомерный массив $a:

<?$a=['ru'=>['голубой','красный','зеленый'],'en'=>['blue','red','green']];var_dump($a)?>

array(2) { ["ru"]=> array(3) { [0]=> string(14) "голубой" [1]=> string(14) "красный" [2]=> string(14) "зеленый" } ["en"]=> array(3) { [0]=> string(4) "blue" [1]=> string(3) "red" [2]=> string(5) "green" } }

Выведите с его помощью слово 'голубой'.

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

<?var_dump($a['ru'])?>

array(3) { [0]=> string(14) "голубой" [1]=> string(14) "красный" [2]=> string(14) "зеленый" }

В этом случае результатом будет массив ['голубой','красный','зеленый'], который является частью нашего многомерного массива. Чтобы вывести слово 'голубой', на необходимо дописать еще 1 квадратную скобку с ключом, соответствующим этому элементу (у него нет явного ключа - значит его ключ 0):

<?echo$a['ru'][0]/*Выведет голубой*/?>

голубой

Выведем теперь слово красный:

<?echo$a['ru'][1]/*Выведет красный*/?>

красный

Выведем red:

<?echo$a['en'][1]/*Выведет red*/?>

red

Задачи для решения. Работа с массивами

Создайте массив $a=['a','b','c']. Выведите значение массива на экран с помощью функции var_dump().

<?$a=['a','b','c'];var_dump($a)?>

array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" }

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

<?$a=['a','b','c'];echo$a[0].$a[1].$a[2]?>

abc

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

<?$a=['a','b','c','d'];echo$a[0].'+'.$a[1].', '.$a[2].'+'.$a[3]?>

a+b, c+d

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

<?$a=[2,5,3,9];echo$a[0]*$a[1].', '.$a[2]*$a[3];$r=$a[0]*$a[1]+$a[2]*$a[3];echo'<p>'.$r?>

10, 27

37

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

<?$a[]=1;$a[]=2;$a[]=3;$a[]=4;$a[]=5;var_dump($a)?>

array(9) { [0]=> int(2) [1]=> int(5) [2]=> int(3) [3]=> int(9) [4]=> int(1) [5]=> int(2) [6]=> int(3) [7]=> int(4) [8]=> int(5) }

Ассоциативные массивы

Создайте массив $a. Выведите на экран элемент с ключом 'c'.

<?$a=['a'=>1,'b'=>2,'c'=>3];echo$a['c']?>

3

Создайте массив $a. Найдите сумму элементов этого массива.

<?$a=['a'=>1,'b'=>2,'c'=>3];echo($a['a']+$a['b']+$a['c'])?>

6

Создайте массив заработных плат $a. Выведите на экран зарплату Пети и Коли.

<?$a=['Коля'=>'1000$','Вася'=>'500$','Петя'=>'200$'];echo'<p>'.$a['Петя'].'<p>'.$a['Коля']?>

200$

1000$

Создайте ассоциативный массив дней недели. Ключами в нем должны служить номера дней от начала недели (понедельник - должен иметь ключ 1, вторник - 2 и т.д.). Выведите на экран текущий день недели.

<?$a=[1=>'пн','вт','ср','чт','пт','сб','вс'];echo$a[3]?>

ср

Пусть теперь номер дня недели хранится в переменной $d, например там лежит число 3. Выведите день недели, соответствующий значению переменной $d.

<?$a=[1=>'пн','вт','ср','чт','пт','сб','вс'];$d=3;echo$a[$d]?>

ср

Многомерные массивы

Создайте многомерный массив $a. С его помощью выведите на экран слова 'joomla', 'drupal', 'зеленый', 'красный'.

$a=['x'=>['joomla','wordpress','drupal'],'y'=>['blue'=>'голубой','red'=>'красный','green'=>'зеленый']]

joomla

drupal

зеленый

красный

Создайте 2-мерный массив. 1-е 2 ключа - это 'ru' и 'en'. Пусть 1-й ключ содержит элемент, являющийся массивом названий дней недели по-русски, а 2-й - по-английски. Выведите с помощью этого массива понедельник по-русски и среду по английски (пусть понедельник - это 1-й день).

понедельник

sreda

Пусть теперь в переменной $l хранится язык (она принимает 1 из значений или 'ru', или 'en' - либо то, либо то), а в переменной $d - номер дня. Выведите словом день недели, соответствующий переменным $l и $d. Т.е.: если, к примеру, $l='ru' и $d=3 - то выведем 'среда', а если $l='en' и $d=6 - то выведем 'subbota'.

среда

subbota

Содержание

Отвечу на любые вопросы. С уважением, Дмитрий Владимирович.

Ваше письмо×
Free Web Hosting