Массивы в PHP
Массивы — это один из наиболее популярных типов данных. На реальных проектах сайтов они являются лучшим помощником разработчика. Давайте создадим пустой массив. Это можно сделать несколькими способами:
Можно создать не пустой массив, а содержащий элементы. Элементами массива могут быть практически любые типы данных. Попробуем заполнить массив числами и словами:
Получился массив, который содержит 5 элементов. Чтобы получить значение одного из них, необходимо выбрать его по ключу. Если массив не ассоциативный, то ключи ставятся автоматически, начиная с нуля. Приведём пример обращения:
Можно самостоятельно задать ключи массива. К примеру, зададим ключи в виде произвольных чисел. Чтобы задать ключ элемента массива, необходим поставить его название и после него значок =>:
'Сыр', 6 => 'Мышь', 7 => 15, 8 => 'Кот', 9 => 18); echo $a[5]; // результат: 'Сыр' echo $a[6]; // результат: 'Мышь' echo $a[9]; // результат: '18' ?>
Рассмотрим способы добавления элемента в массив. Возьмём массив из последнего примера и добавим в него произвольные элементы несколькими разными способами:
'Сыр', 6 => 'Мышь', 7 => 15, 8 => 'Кот', 9 => 18); $a[10] = 'Котята'; // добавит элемент в массив с ключом 10 и значением 'Котята' $a[] = 'молоко'; // добавит в конец массива элемент со значением 'молоко' array_push($a, 35); // добавит в конец массива элемент со значением 35 ?>
Теперь разберёмся как удалять элементы массива. Попробуем удалить первый и последний элемент. А так же элемент с определённым ключом:
Массивы с числами в виде ключей сами по себе довольно бесполезны. Давайте же сделаем массив, который может встретиться в реальном проекте. К примеру, массив, который возникает в процессе авторизации пользователя на сайте. В этом массиве будут храниться логин, мэйл и пароль пользователя. Обычно такой массив делается во время приёма данных от пользователя, после ввода их в форму входа на сайт. И давайте сразу запишем массив в столбик для наглядности. С точки зрения PHP это не вызовет ошибки, но позволит нам лучше воспринимать информацию. В добавок вместо ключей-цифр поставим текст:
'mouse', 'email' => 'mouse@mousedc.ru', 'password' => 'best_password' ); echo $a['login']; // результат: 'mouse' echo $a['email']; // результат: 'mouse@mousedc.ru' echo $a['password']; // результат: 'best_password' ?>
Такие массивы с текстовыми ключами называются ассоциативными. В программировании сайтов они встречаются намного чаще, чем массивы без ключей или с ключами-цифрами. Они сильно облегчают жизнь программистам.
Обратите внимание, что в ключах ассоциативных массивов лучше ставить латинские буквы. Кириллица может вызвать проблемы и непредсказуемое поведение PHP. Так же как и названия переменных, написанные кириллицей.
Попробуем усложнить задачу — сделаем массив внутри массива. Это вполне законно с точки зрения PHP. Попробуем сделать вложенный массив в примере выше. Он будет находиться под ключом ‘info’. Запишем в него данные пользователя:
'mouse', 'email' => 'mouse@mousedc.ru', 'password' => 'best_password', 'info' => array( 'name' => 'Mouse', 'color' => 'gray', ), ); echo $a['login']; // результат: 'mouse' echo $a['info']['name']; // результат: 'Mouse' ?>
Можно сделать массив с любым уровнем вложенности.
Строку в массив и обратно
Существуют функция explode, которая позволяет быстро создать массив из строки. Это довольно популярная функция, она часто используется в проектах. Приведём пример её использования:
'; print_r($b); echo '
'; ?>
В первый параметр функции explode ставится разделитель, по которому строка будет разделена на элементы массива. Это может быть точка, запятая, пробел или любой другой символ, который есть в строке. Если разделитель не будет найден в строке, то будет возвращён массив с одним элементом, в котором будет вся строка. Если же разделитель встречается в строке, то она будет разделена на элементы массива. Результат из примера выше будет таким:
Array ( [0] => Тише [1] => мыши [2] => кот на крыше )
Существует функция implode. По своей работе она противоположна explode и тоже часто используется в проектах. Эта функция объединяет элементы массива в строку. Первым параметром в этой функции ставится строка-соединитель, которая будет между элементами. Соединителем может быть любой символ, даже пробел и пустая строка (то есть без соединителя, все элементы будут слеплены):
Результат будет таким:
Тише, мыши, кот на крыше
Создание массивов в PHP. Простой, многомерный, ассоциативный
В этой небольшой статье мы рассмотрим несколько способов работы с массивами. Стоит отметить, это один из самых важных типов данных и современные языки программирования даже сложно представить без них. Что же такое массив?
Массив представляет собой структурированный набор данных.
По их структуре можно определить это простой массив или ассоциативный. Нельзя сказать наверняка какой из них лучше, т.к. применять тот или иной тип нужно по ситуации.
Как создать простой массив в PHP
Вот как выглядит простой массив:
Сразу же хочу обратить ваше внимание на данные (да, я специально их так записал ). Данные типа строка, или string всегда записывайте в кавычках, не важно в каких, пойдут и одинарные и двойные (главное чтобы строка начиналась и закрывалась такой же кавычкой). У числа 29 тип integer, или число – для таких типов данных кавычки не нужны.
Проверим как выглядит массив $my_array:
"; print_r($my_array); echo "
«; /* получим Array ( [0] => Стул [1] => Облако [2] => 29 ) */ ?>
так выглядит простой массив.
0,1,2 – индексы нашего массива. С помощью индексов мы можем вывести что-то конкретное из массива.
Также, мы можем создать такой же массив если напишем:
И, есть еще третий способ:
"Стул", 1 => "Облако", 2 => 29);?>
индексы будут заполнены от 0.
PHP что такое ассоциативный массив
Что такое простой массив мы уже разобрались. Ассоциативный массив отличается тем, что вместо индексов используют ключи. То есть, для доступа к значениям мы уже не будем использовать 0,1 или 2. Запишем наш простой массив как ассоциативный:
Стул [sky] => Облако [number] => 29 ) */ ?>
И для вызова мы будем использовать
Вместо цифры (индекса) мы задаем осмысленное название (ассоциацию) и наш индекс теперь можно назвать ключем массива (item, sky, number). Наиболее популярная и, пожалуй, самая удобная запись ассоциативного массива:
"Стул", "sky" => "Облако", "number" => 29 ); ?>
Многомерный массив
Буквально пару слов про этого гиганта
array ( "color" => "red", "year" => "2010", "mark" => "M5" ), "audi" => array ( "color" => "black", "year" => "2011", "mark" => "TT" ) ); print_r ($auto); // вывод массива echo $auto["bmw"]["mark"]; // M5 ?>
Как вы поняли, вместо значения, которым раньше была строка или число, теперь выступает такой тип данных как массив (сделаю тебе массив в массиве, чтобы когда ты вызывал массив там был еще один массив :)).
автор: Dmitriy
З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com
Читайте також:
2 коментаря
Vavanina :
Напомним, что массивы JavaScript могут содержать в качестве элементов другие массивы. Эту особенность можно использовать для создания многомерных массивов. Для доступа к элементам в массиве массивов достаточно использовать кадратные скобки дважды.
классно, особенно со смайлами.
Залишити відповідь Скасувати відповідь
Щоб відправити коментар вам необхідно авторизуватись.
Инициализация массива в PHP
Недавно столкнулся с задачей, что нужно массив, состоящий из n элементов инициализировать нулями. Сделал примерно так:
for($j=0; $j < $n; $j++) $myarray[$j] = 0;
Вопрос, можно ли в PHP это сделать проще и удобнее?
Отслеживать
задан 9 авг 2018 в 9:31
IWProgrammer IWProgrammer
831 1 1 золотой знак 15 15 серебряных знаков 28 28 бронзовых знаков
И для любителей регулярок var_dump(preg_split('~(0)~', str_repeat('0', 10), 0, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE)); . И для нелюбителей var_dump(str_split(str_repeat('0', 10)));
9 авг 2018 в 10:25
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Недавно столкнулся с задачей, что нужно массив, состоящий из n элементов инициализировать нулями. Вопрос, можно ли в PHP это сделать проще и удобнее?
Воспользуйтесь функцией array_fill
// Аргументы: индекс начала, сколько элементов, значение $ar = array_fill(0,10,0); print_r($ar);
Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 0 [9] => 0 )
- array_fill - Создаёт массив и заполняет его значениями.
Работа с массивами в PHP
Массив – это тип данных для хранения упорядоченного набора элементов. Каждый элемент в массиве состоит из ключа и значения.
В PHP имеются только упорядоченные ассоциативные массивы. Индексированных массивов в PHP нет.
Но тем не менее в PHP мы можем создавать простые массивы. При указании значений без ключей, они будут им присваиваться автоматически.
Например, создадим массив, который будет содержать среднюю температуру каждого месяца в году:
Здесь мы создали массив $temperatures, содержащий 12 значений. Каждый элемент в этом массиве имеет ключ. Первый элемент имеет в качестве ключа число 0, второй – число 1, и так далее. Последний элемент имеет в качестве ключа число 11.
Другой вариант создания массивов – это использовать функцию array() :
Создание массива без элементов, то есть пустого массива, в PHP выполняется так:
Обращение к значению массива выполняется посредством ключа, который указывается в квадратных скобках:
В квадратных скобках при необходимости можно указывать выражение, результат вычисления которого будет использоваться в качестве ключа элемента, значение которого нужно получить:
Если мы попытаемся обратиться к элементу, которого нет в массиве, то начиная с PHP 8.0.0, мы получим сообщение об ошибке E_WARNING . При этом в качестве значение будет возвращено null .
Проверить наличия некоторого ключа в массиве можно с помощью функции array_key_exists :
Добавление в массив нового элемента или изменение существующего осуществляется в PHP так:
Здесь мы при добавлении нового элемента в массив не указали ему ключ. В этом случае ключ будет на единицу больше самого большого числового ключа в массиве.
Удаление элемента массива в PHP выполняется с помощью специальной языковой конструкции unset :
С помощью unset вы можете удалить не только отдельный элемент, но и полностью весь массив:
В PHP массиве могут содержаться данные различных типов:
Вывод содержимого массива
Вывести все значения массива на экран можно с помощью функции print_r :
Но чтобы этот вывод был более наглядным лучше это делать внутри тега :
'; print_r($fruits); echo '
';
Ассоциативные массивы
Создание ассоциативных массивов в PHP выполняется с указанием ключа. При этом в качестве ключа могут использоваться как числа, так и строки:
'English', 'fr' => 'French', 'es' => 'Spanish', 'pt' => 'Portuguese' ]; echo $languages['es']; // 'Spanish'
При этом в PHP выполняются следующие преобразования при сохранении ключей:
- строка '7' будет преобразована в число 7 ; но например ключ '07' не будет преобразован, так как он не является корректным числом;
- число 7.5 , то есть число с плавающей точкой ( float ) будет преобразовано к целому числу, в данном случае к 7 ;
- true к 1 , а false к 0 ;
- значение null к пустой строке '' .
'a', '095' => 'b', 9.5 => 'c', true => 'd', null => 'e', ]; echo $arr[95]; // a echo $arr['095']; // b echo $arr[9]; // c echo $arr[1]; // d echo $arr['']; // e
Если несколько элементов в объявлении массива используют одинаковый ключ, то последний перезапишет предыдущие:
'a', '0' => 'b', 0.7 => 'c', false => 'd', ]; echo ''; print_r($array); echo '';
Так как в этом примере все ключи преобразуются к 0 , то каждый следующий элемент будет перезаписывать предыдущий и останется в массиве только один ключ со значением 'd' .
В одном массиве могут содержаться ключи различных типов, то есть одновременно int и string :
'one', 'b' => 'two', ];Перебор массивов
Наиболее удобный способ прохождения по массиву в PHP – это использовать конструкцию foreach :
'English', 'fr' => 'French', 'es' => 'Spanish', 'pt' => 'Portuguese', ]; /* $languages – массив, который нужно перебрать $key – значение ключа $value – значение, соответствующее ключу */ echo ''; foreach ($languages as $key => $value) { echo "Ключ '$key' имеет значение '$value'
"; } echo '';
Если нужно только по значениям:
foreach ($languages as $value) { echo "$value
"; }Если ключи массива составляют последовательность, то перебрать такой массив можно с помощью for :
Здесь мы с помощью встроенной функции count() получить длину или другими словами размер массива. Узнать длину массива также можно с помощью sizeof() .
Функцию count также можно использовать для получения последнего элемента массива. Но это повторим только возможно если ключи массива составляют числовую последовательность, начинающуюся с 0 .
Функции для работы с массивами
В PHP очень много различных функций для работы с массивами. Рассмотрим некоторые из них.
Сортировка
Сортировка массива в порядке возрастания осуществляется с помощью функции sort , в порядке убывания посредством rsort .
Для настройки сортировки можно передать в качестве второго аргумента флаг.
Для того чтобы ключи сохранили значения, с которыми они связаны, сортировку массива необходимо выполнять с помощью функции asort . Функция asort сортирует в порядке возрастания, для сортировки в порядке убывания используйте arsort . Эти функции сортируют массив соответственно как sort и rsort , но ключи в отличие от них остаются связанными с такими же значениями.
Например, выведем с помощью ассоциативного массива $students имя студента и соответствующий полученный им балл в порядке их возрастания:
47, 'Bob' => 24, 'Tom' => 36, ]; asort($students); echo ''; print_r($students); echo '';
Массивы в PHP можно сортировать не только по значениям, но и ключам. Для этого используется функция ksort . Для ассоциативного массива $students функция ksort выстроит все элементы в порядке возрастания названий ключей.
47, 'Bob' => 24, 'Tom' => 36, ]; ksort($students); // ['Bob' => 24, 'John' => 47, 'Tom' => 36]Для сортировки в порядке убывания можно использовать krsort :
krsort($students); // ['Tom' => 36, 'John' => 47, 'Bob' => 24]Перемешивание элементов случайным образом
Если вам нужно перемешать элементы в массиве случайным образом, то можно воспользоваться функцией shuffle :
'English', 'fr' => 'French', 'es' => 'Spanish', 'pt' => 'Portuguese', ]; shuffle($languages); // ['Portuguese', 'French', 'Spanish', 'English'] shuffle($languages); // ['English', 'French', 'Spanish', 'Portuguese']При этом как вы видите, изначальные ключи теряются и массив превращается в индексируемый.
Выстраивание элементов в обратном порядке
Если вам необходимо создать новый массив, в котором элементы нужно выстроить в обратном порядке, то используйте array_reverse :
'English', 'fr' => 'French', 'es' => 'Spanish', 'pt' => 'Portuguese', ]; $languagesReverse = array_reverse($languages); echo ''; print_r($languagesReverse); echo '';
Работа над массивами как с множествами значений
В PHP имеются функции: array_merge , array_intersect и array_diff . Они позволяют работать с массивами как с множествами значений.
1. Объединение одного или несколько массивов вместе выполняется в PHP с помощью функции array_merge :
array_merge(array . $arrays): arrayНапример, объединим с помощью array_merge элементы 3 массивов вместе:
'red', 1, 'php', 4]; $array2 = ['price' => 20.8, 1, 'color' => 'green', 3]; $array3 = ['green', 'price' => 30.5, 3, 'php']; $array = array_merge($array1, $array2, $array3); echo ''; print_r($array); echo '';
Если массивы имеют одинаковые строковые ключи, то более позднее значение этого ключа перезапишет предыдущее. Например, значение 'green' ключа 'color' перезапишет 'red' .
Однако если массивы содержат числовые ключи, то более позднее значение не перезаписывает предыдущее, оно будет просто добавлено в массив. Значения с числовыми ключами в результирующем массиве будут перенумерованы последовательно начиная с нуля.
Функция array_merge , вызванная без аргументов возвращает пустой массив:
2. Функция array_intersect вычисляет пересечения значений основного массива со значениями других массивов:
// $base – основной массив // $arrays – другие массивы array_intersect(array $base, array . $arrays): arrayВ качестве результата оно возвращает массив со значениями основного массива, которые имеются во всех других массивах.
'red', 1, 'php', 4]; $array1 = ['price' => 20.8, 1, 'color' => 'red', 3]; $array2 = ['green', 'color' => 'red', 3, 'php', 1]; $result = array_intersect($base, $array1, $array2); // ['color' => red, 0 => 1]3. Функция array_diff вычисляет разницу между массивами:
// $base – основной массив // $arrays – другие массивы array_diff(array $base, array . $arrays): arrayВ качестве результата оно возвращает массив со значениями основного массива, которых нет ни в одном из других массивов.
'red', 1, 'php', 4]; $array1 = [3, 'color' => 'red']; $array2 = [4, 'php']; $result = array_diff($base, $array1, $array2); // [0 => 1]Проверка наличия ключей и значений в массиве
Проверить имеется ли указанное значение в массиве можно с помощью функции in_array :
if (in_array('apple', $fruits)) { // значение 'apple' имеется в массиве $fruits }Здесь, в первый аргумент необходимо передать искомое значение, а во второй – сам массив. В качестве результата in_array возвращает true или false .
Кроме in_array в PHP имеется ещё функция array_search . Она выполняет тоже самое, но в отличие от in_array возвращает ключ этого значения.
Если нужно проверить наличие не значения, а ключа, то можно воспользоваться функцией array_key_exists :
if (array_key_exists('es', $languages)) { // ключ 'es' имеется в массиве $languages }Сериализация
Сериализация в PHP – это очень мощный механизм, позволяющий легко преобразовать массив в строку, которая будет содержать ключи и значения в структурированном формате. Полученные строки затем можно сохранять в файлы и базу данных.
Сериализация массива в строку выполняется с помощью функции serialize . Для декодирования строки, содержащей сериализованный массив, обратно в исходный массив используется функция unserialize :
// исходный массив $person = [ 'name' => 'Alexander', 'age' => 23 ]; // сериализуем массив в строковое представление, уникальное для PHP $personString = serialize($person); // выведем на экран строку echo $personString; // 'a:2:{s:4:"name";s:9:"Alexander";s:3:"age";i:23;}' // преобразуем строку обратно в массив $personArray = unserialize($personString); // выведем на экран массив в форматированном виде echo ''; print_r($personArray); // array('name' => Alexander, 'age' => 23) echo '';
Многомерные массивы
Многомерные массивы – это массивы, элементы которого просто содержат другие массивы.
Пример создания двумерного массива:
$software = [ 'os' => ['Windows', 'Linux', 'macOS'], 'browsers' => ['Firefox', 'Chrome', 'Safari', 'Edge'], 'code editors' => ['Visual Studio Code', 'Atom', 'Sublime Text'], ];По сути двумерный массив – это массив массивов. Обращение к элементу массива в этом случае осуществляется с использованием двух квадратных скобок:
echo $software['os'][0]; // 'Windows' $software['browsers'][3] = 'Opera';Выведем с помощью функции print_r массив $software в форматированном виде:
echo ''; print_r($software); echo '';




