Массивы в PHP: что это и как с ними работать на примерах
Оглавление:
Что этоЗачем нужно
Типы: численно-индексированный, ассоциативный, многомерный
Как создать
Вывод
Ключи
Как получить доступ к элементам
Как узнать длину
Как добавить элемент
Как удалить элемент
Как объединить
Полезные видео
Массив в PHP (от англ. Array) — это глобальный объект для хранения набора данных упорядоченным образом. Такой упорядоченный список элементов всегда имеет собственный ключ — он называется индексом, а каждое значение в такой коллекции данных — называется элементом.
Простыми словами, массив в PHP — это набор определённых данных, объединенный под каким-либо названием (другими словами, несколько элементов в пределах одной переменной).
Зачем они нужны
Массив — это такая структура данных, которая хранит одно или несколько однотипных значений в одном объекте. Например: вам требуется хранить 500 чисел. И вместо того, чтобы определять 500 переменных напрямую, достаточно определить массив длиной 500.
И подобные объекты-массивы (array) есть практически во всех популярных языках программирования. По сути — это набор значений однотипных переменных, объединенных общим названием и сгруппированных в зоне распределения.
Сложно? Тогда, представьте список продуктов. Допустим, нам нужно купить:
- Апельсины.
- Сыр.
- Оливки.
В массиве эти продукты могут выглядеть следующим образом:
$groceries[0] = "Oranges";
$groceries[1] = "Cheese";
$groceries[2] = "Olives";
Или так:
$groceries = array('Oranges','Cheese','Olives');
Почему массив — это удобно и красиво? Всё просто: он содержит в себе весь список объектов. Можно быстро добавить или удалить объект из списка, например.
Массив в PHP — не просто метод хранения данных. Скорее — это способ их организации.
Благодаря таким объектам вы можете создать простейшую базу данных и в дальнейшем управлять её содержимым. И обучение работе с массивами — одна из первых задач, с которыми вы столкнетесь, став программистом на PHP.
Типы массивов: численно-индексированный, ассоциативный, многомерный
Существует три разных типа таких объектов.
Запомнить: доступ к каждому значению массива осуществляется с помощью идентификатора, который называется индексом массива.
- Численно-индексированный. Это массив с числовым индексом. Доступ к значениям происходит линейно (другими словами, порядок индексов — линейный).
- Ассоциативный. Массив со строками в качестве индекса. Элементы находятся в соответствии со значениями ключей (а не в линейном порядке, как в случае с численно-индексированным типом массива).
- Многомерный. Массив, содержащий один или несколько массивов, доступ к значениям которых осуществляется с помощью нескольких индексов.
Разберём каждый из этих типов подробнее.
Численно-индексированный массив
Элементы массива адресуются индексами (числами). Такой массив может хранить любые данные, например: числа, строки, иные объекты.
Метод 1: согласно синтаксису:
arrayname = array(elements);
Пример:
$time=array(30,33,2,55);
Метод 2: путем прямого присвоения значений (с использованием индекса).
Пример:
$time[6]=23;
Обратите внимание: доступ к элементам массива осуществляется по их индексу.
Синтаксис следующий:
arrayname[index]
Пример:
echo $time[3];
Вывод:
1
Запомнить: индекс всегда начинается с 0.
Пример
<?php
// Это численно-индексированный тип массива
$animals = array('Elephant, 'Wolf', 'Tiger', 'Crocodile', 'Baboo');
var_dump($animals);
?>
Ассоциативные массивы
Элементы в этом типе представлены строковым идентификатором индекса. Этот идентификатор и применяется для доступа к элементам (вместо индекса). Например, вот так:
arrayname = array(
"identifier1" => value2,
"identifier2" => value2);
Пример:
$ages= array("ab"=>30,"abc"=>33,"dc"=>2);
Синтаксис:
arrayname["identifier"]
Пример:
echo $ages["dc"];
Пример
<?php
$age = array("Pavel"=>"45", "Boris"=>"47", "Joanna"=>"53");
echo "Pavel is " . $age['Pavel'] . " years old.";
?>
Многомерный массив
Многомерный тип хранит другие массивы по каждому индексу в качестве элемента. Другими словами, многомерные массивы можно представить как «массив массивов».
Синтаксис:
$mainarrayname = array(
"subarrayname1" => array(elements),
"subarrayname2" => array(elements)
);
Пример
$ages=array(
"dev1" => array("a1"=>1,"a2"=>2,"a3"=>3),
"com1" => array("h1"=>45,"h2"=>65,"h3"=>35),
"man1" => array("m1"=>22,"m2"=>44,"m3"=>5)
);
echo $ages["com1"]["h2"];
prints 65
Как создать массив в PHP
В PHP для создания массива используется одноименная функция:
array();
Но все не так просто. Давайте посмотрим на особенности создания каждого вида массива. Начнём с численно-индексированного.
Численно-индексированные
Существует два вида численно-индексированных массивов по типу присвоения индекса:
1. Автоматическое присвоение. Пример:
$animals = array("Cat", "Dog", "Mouse");
(помните: индекс всегда начинается с 0).
2. Ручное присвоение. Пример:
$cars[0] = "Cat";
$cars[1] = "Dog";
$cars[2] = "Mouse";
Ассоциативные
Напомним: это массивы, использующие «именованные» ключи, которые им присваивают (со строками-индексами).
Существует два способа создания ассоциативного массива:
1 способ:
$age = array("Papa"=>"45", "Baba"=>"77", "Mama"=>"53");
2 способ — более наглядный для объемных списков:
$age['Papa'] = "45";
$age['Baba'] = "77";
$age['Mama'] = "53".
Многомерные
Напомним: это массив, содержащий один или несколько массивов.
PHP поддерживает многомерные массивы глубиной в два / три / четыре / пять и более уровней. Но начинающим лучше воздержаться от работы с объектами глубже 3-х уровней.
Размерность указывает на количество индексов, необходимых для выбора элемента. Например:
- Для выбора элемента двумерного массива нужно два индекса.
- Для трехмерного — три индекса.
- И так далее.
Двумерные массивы
Двумерный массив — это массив массивов. Трехмерный массив будет массив массивов массивов. И так далее.
Представим что у нас есть какие-нибудь данные, например, разные предметы одежды. Для удобства определим их в таблицу:
Название |
В наличии (in stock) |
Продано (sold) |
Volvo (Shirt) |
32 |
28 |
BMW (Pants) |
25 |
23 |
Saab (Tie) |
6 |
3 |
Land (Tuxedo) |
27 |
25 |
Мы можем хранить данные из приведенной выше таблицы в двумерном массиве следующим образом:
$clothes = array (
array("Shirt",32,28),
array("Pants",25,23),
array("Tie",6,3),
array("Tuxedo",27,25)
);
Пример: двумерный объект $clothes содержит четыре массива, и у него два индекса: строка и столбец. Представим сказанное так:
<?php
echo $clothes[0][0].": In stock: ".$clothes[0][1].", sold: ".$clothes[0][2].".
";
echo $clothes[1][0].": In stock: ".$clothes[1][1].", sold: ".$clothes[1][2].".
";
echo $clothes[2][0].": In stock: ".$clothes[2][1].", sold: ".$clothes[2][2].".
";
echo $clothes[3][0].": In stock: ".$clothes[3][1].", sold: ".$clothes[3][2].".
";
?>
Также можно поместить цикл for внутрь другого цикла for — чтобы получить элементы массива $clothes (и далее нужно будет указать на два индекса):
<?php
for ($row = 0; $row < 4; $row++) {
echo "Row number $row
";
echo "";
for ($col = 0; $col < 3; $col++) {
echo "- ".$clothes[$row][$col]."
";
}
echo "
";
}
?>
Как вывести массив
Для вывода вы можете использовать цикл foreach, функцию print_r или функцию var_dump.
В цикле foreach
Этот способ пригодится, когда нужен поэлементный перебор массива.
Пример:
<?php
foreach ($someArray as $item) {
echo "- $item
";
}
?>
Через функцию print_r
Этот способ позволяет вывести массив таким образом, чтобы он оставался читаемым.
Пример:
<?php
echo "";
print_r($myArray);
echo "
";
?>
Если вам нужны пробелы с переносами строк — не забудьте использовать тег pre.
Через функцию var_dump
Этот способ позволяет вывести переменную вместе со структурированной информацией о ней (например, тип и значение переменной).
Пример:
<?php
echo "";
var_dump($myArray);
echo "
";
?>
Также вывести массив в PHP можно при помощи функции var_export().
Пример:
$array = array(
'Andrei',
'Boris',
'Carina,
'Denis',
'Elena',
);
echo '';
echo var_export($array);
echo '
';
Вышеуказанная функция позволяет вернуть строковое представление переменной.
Работа с ключами массива
Здесь стоит немного повторить терминологию.
- Массив — это коллекция элементов.
- Каждый элемент в такой коллекции имеет ключ и значение.
- Сам ключ может быть целым числом (это и будет индекс) или строкой.
Рассмотрим пару примеров. Вот рандомный массив без ключей:
$arr = [ 'Albert', 'Albertoff', '12345', '828', 'green' ];
Как видим, данные есть. Но без ключей они не имеют особого смысла.
Попробуем добавить такие ключи, чтобы данные стали удобочитаемыми и обрели смысл:
$arr = [
'firstname' => 'Albert',
'lastname' => 'Albertoff',
'zipcode' => '12345',
'areacode' => '828',
'favoritecolor' => 'green'
];
Это ассоциативный тип массива — его ключи не являются числовыми. Но если бы мы не задали объекту свои собственные ключи, то он мог быть численно-индексированным (то есть, каждый ключ был бы числом):
$arr = [
0 => 'Albert',
1 => 'Albertoff',
2 => '12345',
3 => '828',
4 => 'green'
];
Пример использования ключа:
$array = [
'car' => 'opel'
];
foreach($array as $key => $value) {
print $array[$key];
}
Пояснение:
- Мы перебираем массив, а затем выводим значение массива по индексу ключа.
- Для доступа к значению используется переменная $key. Переводя на естественный язык, это можно представить как: "У нас есть индекс ключа под названием car, давайте перейдем в этот индекс и получим значение opel". Конечно, можно использовать print $value; и получить аналогичный результат.
- Ключи особенно выручают, когда нужно перебрать сразу несколько массивов.
Запомнить:
- Ключ можно представить как индекс.
- Ключ указывает на значение, хранящееся в объекте array.
- Форматируется он как пара ключ / значение.
Как получить доступ к элементу массива
Первый и самый очевидный способ — выборка по ключу или индексу. Пример:
<?php
$array = ['One', 'Two', 'Three'];
// получить первый элемент $array array
echo $array[0];
echo "
";
// получить второй элемент $array array
echo $array[1];
echo "
";
// получить третий элемент $array array
echo $array[2];
echo "
";
?>
В результате имеем вывод:
One
Two
Three
Более «чистый» способ написать вышеприведенный код — использовать цикл foreach для перебора. Пример:
<?php
$array = ['One', 'Two', 'Three'];
foreach ($array as $element) {
echo $element;
echo '
';
}
?>
Вывод будет идентичным, а кода написано меньше.
Аналогичным образом можно использовать цикл for:
Используем for для перебора
Пояснение:
- Мы использовали цикл for, чтобы пройти по каждому индексу в массиве и затем вывести значение, хранящееся в этом индексе.
- Также применили функцию count — она используется для подсчета количества элементов в объекте. О ней речь пойдет ниже.
Как узнать точное число элементов в массиве
Для этого нужно использовать функцию count() или функцию sizeof(). Так можно быстро узнать определенное количество элементов или значений в объекте.
- Функции count() и sizeof() возвращают 0 для переменной, которую можно инициализировать пустым массивом.
- Если значение для переменной не задано, она возвращает 0.
Пример:
<?php
$days = array("Meriva", "Insignia", "Zafira", "Astra", "Mokka", "Rocks", "Crossland");
// Узнать размер массива
echo count($cars);
echo "
";
echo sizeof($cars);
?>
Как добавить элемент в массив
Array_push() — функция для вставки новых элементов в объект. Они будут автоматически попадать в конец массива.
Функция принимает один элемент или массив элементов и добавляет его в массив.
Синтаксис:
array_push(array,value1,value2...)]
Параметры:
- array. Обязательный параметр. Указывает глобальный массив.
- value1. Опциональный параметр. Указывает значение для добавления (в PHP до версии 7.3).
- value2. Опциональный параметр. Указывает второе значение для добавления.
Возвращаемое значение
Функция array_push() возвращает новое количество элементов массива. Пример:
<?php
$a=array("car","bike");
array_push($a,"boat","segway");
print_r($a);
?>
Можно добавлять произвольное количество значений, но эти элементы, в любом случае, будут иметь числовые ключи: даже если исходный массив имеет строковые ключи.
Как удалить элемент массива
Когда нужно удалить только один элемент объекта — используйте функцию unset() или array_splice().
Если значение известно, но неизвестен ключ для удаления элемента — используйте array_search(), чтобы получить ключ. Но этот подход работает только в том случае, если элемент встречается не более одного раза — array_search возвращает только первое совпадение.
unset()
Функция удаляет перечисленные переменную. На поведение функции влияет тип аргумента.
Обратите внимание: при использовании unset() ключи массива не изменяются.
Если же нужно переиндексировать ключи, лучше использовать array_values() — сразу после unset(). Ключи преобразуются в числовые.
array_splice()
Удаляет часть массива и заменяет её «чем-нибудь ещё» (так написано в документации).
При использовании array_splice() ключи будут автоматически переиндексированы, но вот ассоциативные ключи — не изменятся.
Еще раз напомним: array_values() преобразует все ключи в числовые.
Запомнить:
- В качестве второго аргумента функция требует offset.
- Если нужно удалить несколько элементов массива и нужды в вызове unset() или array_splice() нет, лучше использовать функции array_diff() или array_diff_key(). Выбирайте из них в зависимости от того, известны ли вам значения или ключи элементов, которые нужно удалить.
Как объединить массивы
Рассмотрим три способа для разных случаев.
Вариант 1
Самый очевидный способ объединить — с помощью функции array_combine(). Она объединяет два объекта, используя ключи из одного и значения из другого.
Синтаксис:
array_combine(keys,values);
Пример:
<?php
$lang=array("python", "javascript", "c#");
$rank=array("01","02","03");
$merge=array_combine($lang,$rank);
print_r($merge);
?>
Вывод:
Array ( [python] => 01 [javascript] => 02 [c#] => 03 )
Вариант 2
Второй вариант — использовать функцию array_merge(). Она объединит один или несколько объектов в один.
Синтаксис:
array_merge(array1,array2,...)
Пример:
<?php
$arr1=array("1"=>"pin","2"=>"node");
$arr2=array("3"=>"pan","d"=>"bee");
print_r(array_merge($arr1,$arr2));
?>
Вывод:
Array ( [0] => pin [1] => node [2] => pan [d] => bee )
Вариант 3
Также можно использовать функцию array_merge_recursive(). Она объединит один или более массивов в один глобальный объект array.
Синтаксис:
array_merge_recursive(array1, array2, array3,...)
Пример:
<?php
$arr1=array("1"=>"pin","2"=>"jacket");
$arr2=array("3"=>"rifle","4"=>"pan");
print_r(array_merge_recursive($arr1,$arr2));
?>
Вывод:
Array ( [0] => pin [1] => jacket [2] => rifle [3] => pan )
Лучшие видео
Напоследок — 5 полезных видео, которые помогут лучше вникнуть в тему и понять ее новичкам.
В ролике рассмотрен основной синтаксис массивов PHP, а также показаны продвинутые концепции. Помимо чтения каталога и преобразования объектов, показано использование цикла foreach — для перебора ассоциативного массива и создания красивой HTML-таблицы с данными о фильмах.
Видео о том, как использовать объекты типа array при разработке сайта.
Пошаговая инструкция для новичков. Работа с кодом.
В этом видео акцент сделан на ассоциативных массивах.
Тот же автор подробно разбирает отличия в разных типах массивов в PHP.
PHP — неотъемлемая часть современного веба. Изучай бэкэнд уже сегодня. Успей попасть в группу!
-
Создавать проекты на PHP
-
Использовать лучшие инструменты
-
Быстро реализовывать свою идею
-
Защита данных
-
Работать с базами данных