Reg.ru: домены и хостинг

Крупнейший регистратор и хостинг-провайдер в России.

Более 2 миллионов доменных имен на обслуживании.

Продвижение, почта для домена, решения для бизнеса.

Более 700 тыс. клиентов по всему миру уже сделали свой выбор.

Перейти на сайт->

Бесплатный Курс "Практика HTML5 и CSS3"

Освойте бесплатно пошаговый видеокурс

по основам адаптивной верстки

на HTML5 и CSS3 с полного нуля.

Начать->

Фреймворк Bootstrap: быстрая адаптивная вёрстка

Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.

Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.

Верстайте на заказ и получайте деньги.

Получить в подарок->

Бесплатный курс "Сайт на WordPress"

Хотите освоить CMS WordPress?

Получите уроки по дизайну и верстке сайта на WordPress.

Научитесь работать с темами и нарезать макет.

Бесплатный видеокурс по рисованию дизайна сайта, его верстке и установке на CMS WordPress!

Получить в подарок->

*Наведите курсор мыши для приостановки прокрутки.


Массивы в PHP: основы

В этом материале разберемся с вами в следующих вопросах:

- Что такое массив,
- Какие виды массивов существуют в PHP,
- Как создавать массивы,
- Каковы особенности разных видов массивов,
- Как выводить элементы массива на экран.


Понятие массива

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

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


Виды массивов

Один из видов - это массив с числовым индексированием, или числовой массив. Чтобы обратиться к элементу такого массива, достаточно знать его позицию в массиве, называемую индексом. Позиции определяются по простому очевидному принципу - последовательной нумерации элементов. Единственный момент, который стоит учесть, заключается в том, что нумерация начинается не с 1, а с 0. Ну а дальше каждый следующий индекс возрастает на единицу по отношению к предыдущему: 0,1,2,3 и т.д.

Другая разновидность массивов в PHP - это ассоциативные массивы (также называемые словарями или картами).

Отличие от простого индексного массива заключается в том, что в ассоциативном массиве в качестве индексов используются не целые числа, а значения типа "строка". Так, например, в числовом массиве русских царей по имени "Иван" элемент "Иоанн Васильевич" будет может иметь индекс 4, а в ассоциативном массиве ему может быть присвоен индекс "Грозный".

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

Числовые и ассоциативные массивы не обладают независимым поведением. В PHP числовые массивы являются ассоциативными, а ассоциативные массивы — числовыми. К какой же разновидности относится каждый отдельный массив? К обеим сразу и ни к одной. Четкой границы между этими разновидностями не существует.

На первый взгляд это выглядит странно, особенно если вы привыкли к четко определенному поведению, но вскоре становится ясно, что такая гибкость полезна.


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

Итак, чтобы сохранить в массиве несколько значений за один присест, можно использовать функцию array():


$weekdays = array('Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница');

После написания этого кода элемент массива $weekdays[2] содержит значение 'Среда'.

Функцию array() удобно использовать, когда у нас есть небольшие списки заранее известных значений.

Есть и другой способ задания того же самого массива - уже через серию присваиваний:


$weekdays[0] = 'Понедельник';
$weekdays[1] = 'Вторник';
$weekdays[2] = 'Среда';
$weekdays[3] = 'Четверг';
$weekdays[4] = 'Пятница';

либо:


$weekdays[] = 'Понедельник';
$weekdays[] = 'Вторник';
$weekdays[] = 'Среда';
$weekdays[] = 'Четверг';
$weekdays[] = 'Пятница';

Начиная с PHP 5.4 также можно использовать компактный синтаксис операций с массивами,позаимствованный из JavaScript:


$weekdays = ['Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница'];

Когда мы заносим в массив элемент без указания индекса, PHP интерпретирует это как добавление нового элемента в конец массива. PHP производит проверку текущей длины массива $weekdays и использует ее как позицию для нового присваиваемого значения.

При этом, конечно, подразумевается, что $weekdays не присвоено скалярное значение (например, 4) или объект. В этом случае PHP будет ругаться, т.к. не сможет обработать как массив значение, которое массивом не является. Однако, если переменная используется впервые, PHP автоматически преобразует ее в массив и начинет индексирование с 0.

Пока мы посмотрели на примеры, в которых в массиве сохраняются лишь строки. Однако PHP позволяет присвоить элементу массива любой тип данных:

- логическое значение,
- целое число,
- число с плавающей точкой,
- строку,
- объект,
- ресурс,
- NULL,
- другой массив.

Поэтому мы можем забирать массивы или объекты прямо из базы данных и заносить их в массив:


while ($row = mysqli_fetch_assoc($r))
{
    $weekdays[] = $row;
}

while ($obj = mysqli_fetch_object($s))
{
    $holidays[] = $obj;
}

Как вы видите, в первом цикле while у нас создается так называемый массив массивов. Второй же цикл позволяет сформировать массив объектов.

Еще один важный момент заключается в том, что мы можем определить массив со строковыми ключами вместо целочисленных, используя для этого уже известную нам функцию array() в сочетании с оператором "=>":


$weekdays = array('день тяжелый' => 'Понедельник', 'тоже напряженный' => 'Вторник',
                'долго длится как всегда' => 'Среда', 'все как обычно' => 'Четверг', 'о субботе помечтать' => 'Пятница');

Теперь элемент $weekdays['тоже напряженный'] содержит строку 'Вторник'. Данная конструкция является сокращенной записью для следующей серии последовательных присвоений:


$weekdays['день тяжелый'] = 'Понедельник';
$weekdays['тоже напряженный'] = 'Вторник';
$weekdays['долго длится как всегда'] = 'Среда';
$weekdays['все как обычно'] = 'Четверг';
$weekdays['о субботе помечтать'] = 'Пятница';

Короткий синтаксис может быть применен и в этом случае:


$weekdays = [
	'день тяжелый' => 'Понедельник',
	'тоже напряженный' => 'Вторник',
	'долго длится как всегда' => 'Среда',
	'все как обычно' => 'Четверг',
	'о субботе помечтать' => 'Пятница'
];

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


$weekdays['день тяжелый'] = 'Воскресенье';

переопределит значение 'Понедельник'. Ну и, конечно, ничто не мешает нам добавить в массив новый ключ:


$weekdays['шестой день'] = 'Суббота';

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

Почему это удобно? Быстродействие приложения не снижается; вдобавок операции поиска по ключу или изменения значений выполняются просто, потому что ключ уже известен.

Часто перед вами будет вставать задача поэлементной обработки массива (или некоторых его элементов). В этом случае проще всего воспользоваться циклом foreach:


$weekdays = array('день тяжелый' => 'Понедельник', 'тоже напряженный' => 'Вторник',
                'долго длится как всегда' => 'Среда', 'все как обычно' => 'Четверг', 'о субботе помечтать' => 'Пятница');

foreach ($weekdays as $day_description => $weekday)
{
    echo "$weekday - $day_description.<br>";
}

В примере выше при каждой итерации PHP присваивает следующий ключ переменной $day_description, а значение, связанное с этим ключом, — переменной $weekday. После перебора всех элементов цикл завершается.

Ну и, наконец, еще одна заметка напоследок. Иногда бывает нужно разбить массив на отдельные переменные для последующего их использования. Для этого используется языковая конструкция list:


$weekdays = array('Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница');
list($day1, $day2, $day4, $day4, $day5) = $weekdays;

Результатом выполнения этого кода будет возможность использовать переменные с именами от $day1 до $day5, а храниться в них будут значения от "Понедельник" до "Пятница".

На этом всё. С введением в тему массивов пока закончим.

Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!


Смотрите также:

PHP: Получение информации об объекте или классе, методах, свойствах и наследовании

PHP: Получение информации об объекте или классе, методах, свойствах и наследовании

CodeIgniter: жив или мертв?

CodeIgniter: жив или мертв?

Функции обратного вызова, анонимные функции и механизм замыканий

Функции обратного вызова, анонимные функции и механизм замыканий

Применение функции к каждому элементу массива

Применение функции к каждому элементу массива

Слияние массивов. Преобразование массива в строку

Слияние массивов. Преобразование массива в строку

Деструктор и копирование объектов с помощью метода __clone()

Деструктор и копирование объектов с помощью метода __clone()

Эволюция веб-разработчика или Почему фреймворк - это хорошо?

Эволюция веб-разработчика или Почему фреймворк - это хорошо?

Магические методы в PHP или методы-перехватчики (сеттеры, геттеры и др.)

Магические методы в PHP или методы-перехватчики (сеттеры, геттеры и др.)

PHP: Удаление элементов массива

PHP: Удаление элементов массива

Ключевое слово final (завершенные классы и методы в PHP)

Ключевое слово final (завершенные классы и методы в PHP)

50 классных сервисов, программ и сайтов для веб-разработчиков

50 классных сервисов, программ и сайтов для веб-разработчиков

Наверх