belarusweb.net
© Петр Романовский Минск, 2016-2017.



belarusweb.net

Основы создания сайтов...
PHP+MySQL >>>
                          Учебник Задачник Справочник

2.6. Массивы

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

Массив (от англ. array) – это упорядоченный набор значений, которые объединены общим именем. Под именем массива подразумевается имя переменной, которой присваивается массив, а сами значения называются элементами массива. Доступ к ним может быть получен при помощи уникального целочисленного или строкового индекса, который присваивается каждому элементу массива.

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

В PHP не делается различия между индексированными и ассоциативными массивами, а индексы принято называть ключами.

Также отметим, что в PHP массивы являются:

Для создания массивов используется специальная языковая конструкция array(), в которой в качестве параметров через запятую указываются пары 'key=>value' (т.е. 'ключ=>значение'), или квадратные скобки, которые заменяют конструкцию array(), представляя собой более короткий синтаксис определения массивов. После создания массивов доступ к его элементам может быть получен по их ключам, которые необходимо указывать в квадратных скобках после имени массива (см. пример 2.9).

<?php
$m_1=array( 
		'country'=>'Belarus',  // Создали одномерный массив с двумя 
		'city'=>'Minsk'  	     //элементами и присвоили его переменной 
	  );  						  //Не забываем про точку с запятой в конце инструкции!

echo $m_1["country"]."<br>"; //Выведет строку 'Belarus'
	  
$m_2=[ 
		  'country'=>'Russia', // Создали одномерный массив при  
		  'city'=>'Moscow' 	  // помощи квадратных скобок 
	  ];  

echo $m_2["city"]."<br>"; 	  //Выведет строку 'Moscow'
?> 

Пример 2.9. Создание массивов

При создании массивов или добавлении новых элементов разрешается не указывать ключи элементов. В таком случае при создании массивов интерпретатор PHP будет нумеровать элементы начиная с нуля, а при добавлении новых элементов в массив использовать предыдущее наибольшее значение числового ключа, но увеличенное на единицу. Также разрешается указывать ключи только для некоторых элементов массива, остальные будут пронумерованы автоматически. Отметим, что если несколько значений будут использовать одинаковый ключ, то использоваться будет только последнее из них, а все остальные значения будут перезаписаны (см. пример 2.10).

<?php
$m_1=[2,4,76];				  //Не указываем ключи вообще 

echo $m_1[0]." ".$m_1[2]; //Выведет '2 76'
//echo $m_1[3];			  //Сообщит об ошибке, т.к. в массиве присутствует
                          //только три элемента с ключами 0, 1 и 2

				 
$m_2=["имя"=>"Вася",8.56,100]; //Указали ключ первого элемента, а для второго
			//и третьего элементов интерпретатор автоматически установит числовые
			//ключи, равные 0 (т.к. других числовых ключей в массиве пока нет)
			//и 1 (на единицу больше, чем 0)
echo $m_2["имя"]." ".$m_2[0]." ".$m_2[1]; //Выведет строку 'Вася 8.56 100'				


$m_3=[2=>"php",' ',"версия"=>'7.0.0']; //Указали числовой ключ первого элемента, 
			//а для второго элемента (строка состоящая из пробела) интерпретатор 
			//автоматически установит числовой ключ, равный 3 (2+1) 

echo $m_3[2].$m_3[3].$m_3["версия"];   //Выведет строку 'php 7.0.0'	
//echo $m_3[1]; //Сообщит об ошибке, т.к. нумерация в массиве начинается с 2


$m_4=[3,5=>"orange",5=>"apple",33]; 	//Указали одинаковые ключи, поэтому 
			//доступно будет только последнее значение, т.е. "apple", кроме того, 
			//числовой индекс последнего элемента будет равен 6 (5+1) 

echo $m_4[0]." ".$m_4[5]." ".$m_4[6];  //Выведет строку '3 apple 33'	
//echo $m_4[1]; //Сообщит об ошибке, т.к. элемента с таким ключем в массиве нет

/* Не забываем, что при конкатенации со строкой значения любого типа 
будут также преобразованы в строку!!! */
?>

Пример 2.10. Особенности использования ключей элементов массива

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

Как было сказано выше, для доступа к элементу массива нужно указать его ключ в квадратных скобках после имени массива. Если элементом массива является другой массив, то для доступа к значению такого элемента-массива следует применять еще одни квадратные скобки с указанным в них ключем (см. пример 2.11). Кстати, вместо квадратных скобок для доступа к элементам массива допускается использование фигурных скобок '{' и '}', но мы будем использовать только квадратные скобки.

<?php
$m_1=[
	"apple",
	"my_array"=>[4,12],
	"building"=>'house'
	];  									 //Создаем массив 

echo $m_1[0].'<br>';					 //Выведет строку 'apple'
echo $m_1["building"].'<br>';		 //Выведет строку 'house'
echo $m_1["my_array"][0].'<br>';  //Выведет '4'
?> 

Пример 2.11. Доступ к элементам массива

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

<?php
$m_1=array(
	3=>"fruit",  		 //Нумерация элементов начинается с 3
	33,			 		 //Значит данный элемент будет иметь ключ со значением 4
	"number"=>7
	);   					 //Создаем массив 
	
$m_1[0]=24;  	 		 //Добавили в массив новый элемент	со значением ключа 0
$m_1[]="one";   		 //Добавили в массив новый элемент, которому интерпретатор 
							 //присвоит ключ со значением 5 (на 1 больше максимально 
							 //существующего, а это 4)
$m_1["city"]="Minsk"; //Добавили элемент в массив со значением ключа "city"
$m_1["number"]=88;    //Изменили значение элемента массива

echo $m_1[0].'<br>';  		 //Выведет строку '24'
echo $m_1[5].'<br>'; 		 //Выведет строку 'one'
echo $m_1["city"].'<br>'; 	 //Выведет строку 'Minsk'
echo $m_1["number"]; 	  	 //Выведет '88'

/* Напомним, что оператор echo выводит строки, 
хотя мы часто не указываем этого явно */
?> 

Пример 2.12. Добавление или изменение элементов массива

Для удаления пары 'key=>value' или всего массива следует использовать функцию unset(). Также следует помнить, что массив представляет собой набор значений, которые присвоены переменной. Поэтому, если этой переменной присвоить другое значение, например, число или строку, то массив будет удален, а в переменной будет храниться новое значение (см. пример 2.13).

<?php
$m_1=array(
	3=>"fruit",  			//Нумерация элементов начинается с 3
	33,						//Значит данный элемент будет иметь ключ со значением 4
	"number"=>7
	);   						//Создаем массив 
	
unset($m_1[3]);  	 		//Удалили элемент из массива
echo $m_1[3].'<br>'; 	//Интерпретатор выведет ошибку, т.к. такого элемента
								//больше в массиве нет

unset($m_1);  	 			//Удалили весь массив
echo $m_1; 					//Интерпретатор выведет ошибку о том, 
								//что такой переменной не существует

$my_array=[2,45];			//Создаем массив из двух элементов
$my_array=5; 				//Присваиваем переменной новое значение, при этом массив 
								//с именем "my_array" будет удален
echo $my_array;  			//Выведет '5'		
?> 

Пример 2.13. Удаление элементов массива и самого массива

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

Контрольные вопросы и задания

  1. Дайте определение массиву. Какие массивы называют ассоциативными?
  2. Что означают понятия нетипизированного и динамического массивов?
  3. Как в PHP создаются массивы? Опишите особенности использования ключей элементов массива.
  4. Как осуществляется доступ к элементам массива, а также добавление, изменение значений или удаление элементов массива?

Словарь новых английских слов

boolean [bʊˈlɪən] – логический тип.
integer [ˈɪntɪdʒə] – целое число.
float [fləʊt] – плавать, число с плавающей точкой.
string [strɪŋ] – струна, строка.
array [əˈreɪ] – массив.
object [ˈɒbdʒɪkt] – объект, предмет.
resource [rɪˈsɔːs] – ресурс.
null [nʌl] – отсутствующий, нулевой.
true [truː] – истинный, верный.
false [fɔːls] – ложный, неверный.
number [ˈnʌmbə] – число, количество.
here [hɪə] – здесь, тут.
now [naʊ] – теперь, сейчас.
concatenation [kənkatəˈneɪʃn] – сцепление.
key [kiː] – ключ.
value [ˈvæljuː] – значение.
unset [ʌnˈsɛt] – сброс.

Комментарии (5)
Петр Романовский
1. Приветствуются комментарии, которые содержат дополнения к материалу текущей страницы, а также ваши ответы на вопросы других пользователей.
2. Если вам что-то непонятно - спрашивайте, не забывая написать, что именно и с какого места.
loban777
Вообще ни разу денвером и xammp не пользовался,весь код PHP проверяю в code.sololearn.com,без обновлений страницы и сохр. документа,символ если пропустил-выдаст ошибку, поддерживает ещё несколько языков прог. (HTML,CSS,JS,PHP,Java,Ruby,JQuery,C++,C#,Python 3)которые переключаются нажатием одной кнопки,самый оптимальный вариант изучение языков для новичков
№43 от 2017-10-26 14:18:47
Нравится ()
Ответить
Петр Романовский
loban777
loban777
Вообще ни разу денвером и xammp не пользовался,весь код PHP проверяю в code.sololearn.com,без обновлений страницы и сохр. документа,символ если пропустил-выдаст ошибку, поддерживает ещё несколько языков прог. (HTML,CSS,JS,PHP,Java,Ruby,JQuery,C++,C#,Python 3)которые переключаются нажатием одной кнопки,самый оптимальный вариант изучение языков для новичков
2017-10-26 14:18:47
loban777, локальный сервер нужен не только для проверки кода новичками, но и для того, чтобы делать приложения и тестировать их, приближенно к реальному серверу провайдера. После того, как приложение будет работать на локалке, его очень легко перенести в уже рабочем состоянии на сервер своего провайдера. Ну, и желательно максимально находить ошибки самому и только после попытки запуска кода, чтобы научиться тестировать свои разработки и понимать где и почему ты накосячил. Особенно на стадии обучения.
№45 от 2017-10-26 14:38:10
Нравится ()
Ответить
loban777
Петр Романовский
Петр Романовский
loban777, локальный сервер нужен не только для проверки кода новичками, но и для того, чтобы делать приложения и тестировать их, приближенно к реальному серверу провайдера. После того, как приложение будет работать на локалке, его очень легко перенести в уже рабочем состоянии на сервер своего провайдера. Ну, и желательно максимально находить ошибки самому и только после попытки запуска кода, чтобы научиться тестировать свои разработки и понимать где и почему ты накосячил. Особенно на стадии обучения.
2017-10-26 14:38:10
Петр Романовский, для этого я с самого начала использую Hostinger условно бесплатный тариф за 35р-тестирование реальней некуда,привык-там удобнее!
№46 от 2017-10-26 15:26:31
Нравится ()
Ответить
dorzh
1)При чтении раздела РНР не удалось создать массив с помощью кв.скобок. Полагаю, что это из-за того, что локальный сервер у меня Денвер, а не ХАММР, как Вы советуете и РНР7 не полностью раскрывается в Денвере. 2) В примере 2.11,строка 10, я не стал писать [0]и браузер не обрезал дробную часть у переменной = 4.12. Тогда я начал менять значения переменных и их дробных частей - и все выводится без обрезки! Подскажите, может это какой-то глюк РНР и как будет это выглядеть в др. лок серверах - (ХАММР, Open Server), с ними у меня проблемы, может быть временные, но все же. Спасибо.
№38 от 2017-10-26 10:35:13
Нравится ()
Ответить
Петр Романовский
dorzh
dorzh
1)При чтении раздела РНР не удалось создать массив с помощью кв.скобок. Полагаю, что это из-за того, что локальный сервер у меня Денвер, а не ХАММР, как Вы советуете и РНР7 не полностью раскрывается в Денвере. 2) В примере 2.11,строка 10, я не стал писать [0]и браузер не обрезал дробную часть у переменной = 4.12. Тогда я начал менять значения переменных и их дробных частей - и все выводится без обрезки! Подскажите, может это какой-то глюк РНР и как будет это выглядеть в др. лок серверах - (ХАММР, Open Server), с ними у меня проблемы, может быть временные, но все же. Спасибо.
2017-10-26 10:35:13
dorzh, внимательно еще раз посмотрите синтаксис создания массивов. А потом посмотрите пример еще раз. Ведь там нет переменной 4.12, а есть вложенный массив [4,12] с двумя элементами (числами). Начните с этого. И желательно установите локальный сервер ХАММР, я Денвера в глаза еще не видел)
№41 от 2017-10-26 10:38:10
Нравится ()
Ответить
Показаны все комментарии
Чтобы оставить свой комментарий, авторизуйтесь, пожалуйста!    
     
belarusweb.net © Петр Романовский, Минск, 2016-2017.
Связаться с автором
Наверх