Создание массивов в PHP. Простой, многомерный, ассоциативный. Массивы в PHP Php array ассоциативный массив

В этой небольшой статье мы рассмотрим несколько способов работы с массивами. Стоит отметить, это один из самых важных типов данных и современные языки программирования даже сложно представить без них. Что же такое массив?
Массив представляет собой структурированный набор данных.
По их структуре можно определить это простой массив или ассоциативный . Нельзя сказать наверняка какой из них лучше, т.к. применять тот или иной тип нужно по ситуации.

Как создать простой массив в PHP

Вот как выглядит простой массив:

Сразу же хочу обратить ваше внимание на данные (да, я специально их так записал 🙂). Данные типа строка, или string всегда записывайте в кавычках, не важно в каких, пойдут и одинарные и двойные (главное чтобы строка начиналась и закрывалась такой же кавычкой). У числа 29 тип integer , или число — для таких типов данных кавычки не нужны.
Проверим как выглядит массив $my_array:

"; print_r($my_array); echo ""; /* получим Array ( => Стул => Облако => 29) */ ?>

так выглядит простой массив.
0,1,2 — индексы нашего массива. С помощью индексов мы можем вывести что-то конкретное из массива.

Также, мы можем создать такой же массив если напишем:

И, есть еще третий способ:

"Стул", 1 => "Облако", 2 => 29);?>

И четвертый 🙂

индексы будут заполнены от 0.

PHP что такое ассоциативный массив

Что такое простой массив мы уже разобрались. Ассоциативный массив отличается тем, что вместо индексов используют ключи . То есть, для доступа к значениям мы уже не будем использовать 0,1 или 2. Запишем наш простой массив как ассоциативный:

Стул => Облако => 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 ?>

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

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

1. Добавление элементов массива.

PHP – слабо типизированный язык, т. е. в нем не надо детально описывать ни массив, ни его размер. Вместо этого массив можно одновременно объявить и наполнить:

$capitals = array("Alabama" => "Montgomery", "Alaska" => "Juneau", "Arizona" => "Phoenix");

Дополнительные элементы массива могут присоединяться следующим способом:

$capitals["Arkansas"] = "Little Rock";

Если вы работаете с массивами, пронумерованными числами, и предпочли бы присоединять элементы (в начало массива) и прикреплять элементы, используя детально-названную функцию, рассмотрите array_push() и array_unshift() функции (эти функции не работают с ассоциативными массивами).

2. Удаление элементов массива

Чтобы удалить элемент из массива, воспользуйтесь unset() функцией:

Unset($capitals["California"]);

Работая с массивами, пронумерованными числами, вы получаете больше свободы в том, что касается удаления элементов массива. Т. е. вы можете воспользоваться функциями array_shitt() и array_pop() , чтобы удалить элемент с начала и с конца массива соответственно.

3. Меняем местами ключи и значения

Предположим, что вы захотели создать новый массив с именем $states , столицы штатов в котором будут индексами, а сами штаты – ассоциативными значениями. Данная задача (меняем местами ключи и значения) легко решается с помощью array_flip() функции:

$capitals = array("Alabama" => "Montgomery", "Alaska" => "Juneau", "Arizona" => "Phoenix"); $states = array_flip($capitals); // $states = array(// "Montgomery" => string "Alabama", // "Juneau" => string "Alaska", // "Phoenix" => string "Arizona" //);

4. Слияние массивов

Предположим, что предыдущий массив использовался в сочетании с основанным на web-технологиях "flash card" (flashcard - карточка с текстом и картинкой (используется при обучении иностранному языку)) сервисом и вы захотели дать возможность студентам проверить их знания не только о мировых столицах, но и столицах соединенных штатов. Можно соединить массив (со столицами штатов) с массивом (с мировыми столицами) использую array_merge() функцию:

$stateCapitals = array("Alabama" => "Montgomery", "Alaska" => "Juneau", "Arizona" => "Phoenix"); $countryCapitals = array ("Australia" => "Canberra", "Austria" => "Vienna", "Algeria" => "Algiers"); $capitals = array_merge($stateCapitals, $countryCapitals);

5. Редактирование значений массивов

Предположим, что найденные в массиве данные могут содержать ошибки связанные с употреблением заглавных букв, а вы хотите исправить эти ошибки, прежде чем вносить данные в базу данных. В этом случае можно воспользоваться array_map() функцией, чтобы применить callback-функцию к каждому элементу массива:

Function capitalize($element) { $element = strtolower($element); // Переводим все буквы в нижний регистр return ucwords($element); // Преобразуем в верхний регистр первый символ каждого слова в строке } $capitals = array("Alabama" => "montGoMEry", "Alaska" => "Juneau", "Arizona" => "phoeniX"); $capitals = array_map("capitalize", $capitals);

6. Сортируем массивы по ключам

Флэшкард приложения (flashcard - карточка с текстом и картинкой (используется при обучении иностранному языку)) прибегают к различным техникам обучения, включая сортировку карточек определенными способами, к примеру, по алфавиту. Можно сортировать ассоциативные массивы по ключам, используя ksort() функцию:

$capitals = array("Arizona" => "Phoenix", "Alaska" => "Juneau", "Alabama" => "Montgomery"); ksort($capitals);

7. Рандомизация порядка массива

Перемешать элементы в случайном порядке можно при помощи функции shuffle() :

$capitals = array("Arizona" => "Phoenix", "Alaska" => "Juneau", "Alabama" => "Montgomery"); shuffle($capitals); foreach ($capitals as $k=>$v) echo "$k: $v
";

Результат:

Обратите внимание, на выходе мы получаем не ассоциативный массив, а числовой массив .

Если вместо рандомизации массива вы хотите наугад выбрать значение, воспользуйтесь array_rand() функцией.

8. Определяем, существуют ли ключи и значения

Можно воспользоваться in_array() функцией, чтобы определить, существуют ли элементы массива:

$capitals = array("Arizona" => "Phoenix", "Alaska" => "Juneau", "Alabama" => "Montgomery"); if (in_array("Juneau", $capitals)) { echo "Exists!"; } else { echo "Does not exist!"; }

Возможность определить: существуют ли ключи массива, менее известна. Реализуется же она с помощью array_key_exists() функции:

$capitals = array("Arizona" => "Phoenix", "Alaska" => "Juneau", "Alabama" => "Montgomery"); if (array_key_exists("Alaska", $capitals)) { echo "Key exists!"; } else { echo "Key does not exist!"; }

9. Ищем массив

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

$capitals = array("Arizona" => "Phoenix", "Alaska" => "Juneau", "Alabama" => "Montgomery"); $state = array_search("Juneau", $capitals); // $state = "Alaska"

10. Стандартная PHP библиотека

Стандартная PHP библиотека (SPL) снабжает разработчиков порядочным числом структур данных, интерфейсов, исключений и других свойств, которыми раньше язык PHP похвастаться не мог. Среди этих свойств есть возможность итерации (повторения) массива с помощью объекто-оринетированного синтаксиса.

$capitals = array("Arizona" => "Phoenix", "Alaska" => "Juneau", "Alabama" => "Montgomery"); $arrayObject = new ArrayObject($capitals); foreach ($arrayObject as $state => $capital) { printf("The capital of %s is %s
", $state, $capital); } // The capital of Arizona is Phoenix // The capital of Alaska is Juneau // The capital of Alabama is Montgomery

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

Элементы массива в PHP могут содержать значения любого типа, такие как числа, строки, объекты. Они также могут содержать и другие массивы, что фактически означает создание многомерного или вложенного массива.

В данном уроке рассматриваются многомерные (вложенные) массивы PHP. Объясняется, как их создать, как ими манипулировать, как организовать цикл по всему многомерному массиву в PHP.

Как создать многомерный массив

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

Например:

$myArray = array(array(value1 , value2 , value3), array(value4 , value5 , value6), array(value7 , value8 , value9));

В выше приведённом примере создаётся двумерный массив. Массив верхнего уровня содержит 3 элемента. Каждый элемент также является массивом, содержащим 3 значения.

Также можно использовать ассоциативный массив в качестве многомерного массива. Следующий пример демонстрирует создание индексированного массива, который содержит 3 ассоциативных массива:

$movies = array(array("title" => "Rear Window", "director" => "Alfred Hitchcock", "year" => 1954), array("title" => "Full Metal Jacket", "director" => "Stanley Kubrick", "year" => 1987), array("title" => "Mean Streets", "director" => "Martin Scorsese", "year" => 1973));

Можно вкладывать массивы один в другой настолько глубоко, насколько нужно (хотя на практике глубина вложенности редко бывает больше 3-х уровней). В примере ниже демонстрируется 3-х мерный массив:

$myArray = array(array(array(value1 , value2), array(value3 , value4)), array(array(value5 , value6), array(value7 , value8)));

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

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

$myArray = array(array("один", "два", "три"), array("четыре", "пять", "шесть")); // Выводим "шесть" echo $myArray; ?>

А вот пример, который демонстрирует доступ к различным элементам многомерного массива $movies , который мы создали раньше:

Echo "Название первого фильма:
"; echo $movies["title"] . "

"; echo "Режисер третьего фильма:
"; echo $movies["director"] . "

"; echo "Вложенный массив, который содержится в первом элементе:
"; print_r($movies); echo "

";

Выполнение кода выдаст следующий результат:

Название первого фильма: Rear Window Режисер третьего фильма: Martin Scorsese Вложенный массив, который содержится в первом элементе: Array ( => Rear Window => Alfred Hitchcock => 1954)

Последний пример использует $movies для организации доступа ко всему вложенному массиву в первом элементе массива верхнего уровня, а затем используется функция print_r() для вывода содержимого массива.

Организация перебора всех элементов многомерного массива в цикле

Так же, как и для обычного одномерного массива можно использовать foreach для организации перебора всех элементов многомерного массива. Нужно создать вложенный цикл foreach , то есть один цикл внутри другого:

  1. Внешний цикл берет каждый элемент массива верхнего уровня..
  2. Для каждого элемента верхнего уровня внутренний цикл перебирает вложенный массив, и так далее.

В примере создаётся 2-у мерный массив с информацией по фильмам, а затем организуется цикл по элементам массива для вывода информации на страницу:

$movies = array(array("title" => "Rear Window", "director" => "Alfred Hitchcock", "year" => 1954), array("title" => "Full Metal Jacket", "director" => "Stanley Kubrick", "year" => 1987), array("title" => "Mean Streets", "director" => "Martin Scorsese", "year" => 1973)); foreach ($movies as $movie) { echo "

"; foreach ($movie as $key => $value) { echo "
$key
$value
"; } echo "
"; }

Выполнение данного кода выдаст следующий результат:

Title Rear Window director Alfred Hitchcock year 1954 title Full Metal Jacket director Stanley Kubrick year 1987 title Mean Streets director Martin Scorsese year 1973

Резюме

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

Давайте разберемся, что же такое массив в PHP. Массив – это просто группа каких-то значений, представленных как единое целое. Представьте себе корзину с фруктами. В ней лежат банан, апельсин, яблоко и виноград. В PHP можно представить такую структуру в виде массива. Корзина – это сам массив, а конкретные фрукты – это его элементы.

Давайте теперь создадим в папке с нашим проектом файл для наших экспериментов с массивами. Назовём его arrays.php .

Объявляется массив в PHP с помощью квадратных скобок, вот так:

Вот так мы создали пустой массив.

В старом коде можно встретить пример такого определения массива:

$fruits = array();

Сейчас такая запись является устаревшей, использовать её не стоит!

Можно также создать массив, в котором уже будут какие-либо значения. Это делается так:

$fruits = ["apple", "orange", "grape"];

Вывести получившийся массив можно с помощью уже известной нам функции var_dump:

И давайте запустим этот наш скрипт, открыв в браузере: http://myproject.loc/arrays.php
Мы увидим следующее:

C:\OpenServer\domains\myproject.loc\www\arrays.php:4: array (size=3) 0 => string "apple" (length=5) 1 => string "orange" (length=6) 2 => string "grape" (length=5)

Нумерованные массивы

Array – это тип объекта, а именно массив. Size=3 – это размерность массива (содержит 3 элемента). 0, 1, 2 – это ключи массива , которые также называются индексами . По этим ключам хранятся значения, в нашем случае эти значения – строки. Как мы можем видеть, ключи массива нумеруются с нуля, и далее просто увеличиваются на единицу.

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

Например, чтобы получить нулевой элемент массива (с ключом 0), мы должны сделать следующее:

Результат этого кода:

Давайте получим элемент с индексом 2:

Результат:

Если же мы попытаемся получить элемент с несуществующим индексом, например – 3:

То мы получим warning о том, что элемент с таким ключом не найден.

Добавление и удаление элементов массива

Давайте добавим ещё один элемент в массив, для этого используется следующая конструкция:

$fruits = "mango";

Давайте после этого снова посмотрим на наш массив с помощью var_dump:

Результат – ещё один элемент с индексом 3:

C:\OpenServer\domains\myproject.loc\www\arrays.php:7: array (size=4) 0 => string "apple" (length=5) 1 => string "orange" (length=6) 2 => string "grape" (length=5) 3 => string "mango" (length=5)

Для удаления элементов массива используется конструкция unset. Давайте удалим элемент с индексом 2:

Результат этого кода:

C:\OpenServer\domains\myproject.loc\www\arrays.php:9: array (size=3) 0 => string "apple" (length=5) 1 => string "orange" (length=6) 3 => string "mango" (length=5)

Как мы видим, элемента с индексом 2 больше нет, и образовалась «дырка» в порядковых номерах ключей. Если теперь добавить новый элемент, то у него индекс будет равен 4, но эта дыра по-прежнему останется. Это работает именно так и об этом нужно помнить.

И снова вернёмся к ключам

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

Результат:

C:\OpenServer\domains\myproject.loc\www\arrays.php:5: array (size=3) 5 => string "apple" (length=5) 3 => string "orange" (length=6) 9 => string "grape" (length=5)

Как мы видим, ключи теперь – это 5, 3 и 9.
Если теперь добавить элемент в массив, то у него будет индекс, на единицу больше максимального числового значения ключа:

Результат:

C:\OpenServer\domains\myproject.loc\www\arrays.php:7: array (size=4) 5 => string "apple" (length=5) 3 => string "orange" (length=6) 9 => string "grape" (length=5) 10 => string "mango" (length=5)

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

Результат:

C:\OpenServer\domains\myproject.loc\www\arrays.php:7: array (size=4) 5 => string "apple" (length=5) 3 => string "orange" (length=6) 9 => string "grape" (length=5) 20 => string "mango" (length=5)

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

Результат:

C:\OpenServer\domains\myproject.loc\www\arrays.php:5: array (size=3) 5 => string "apple" (length=5) 3 => string "orange" (length=6) 9 => string "grape" (length=5) C:\OpenServer\domains\myproject.loc\www\arrays.php:9: array (size=3) 5 => string "mango" (length=5) 3 => string "orange" (length=6) 9 => string "grape" (length=5)

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

Помимо числовых ключей можно использовать обычные строки. Такие массивы называются ассоциативными. Давайте представим такую ситуацию: есть какая-то статья, у неё есть название, текст и автор. Её можно легко представить в виде массива. Сделаем это:

"Название статьи", "text" => "Текст статьи"]; $article["author"] = "Имя автора"; var_dump($article);

Результат работы этого кода:

C:\OpenServer\domains\myproject.loc\www\arrays.php:6: array (size=3) "title" => string "Название статьи" (length=29) "text" => string "Текст статьи" (length=23) "author" => string "Имя автора" (length=19)

Отлично, а теперь мы можем использовать это внутри HTML-разметки:

"Название статьи", "text" => "Текст статьи", "author" => "Автор статьи" ]; ?> <?= $article["title"] ?>

Результат:

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

Помните, в начале урока я сказал, что по ключам массива хранятся какие-то значения, и в нашем случае это строки. Так вот, элементом массива, вообще говоря, может являться что угодно. Даже сам массив. =)

"Название статьи", "text" => "Текст статьи", "author" => [ "first_name" => "Иван", "last_name" => "Иванов" ] ]; var_dump($article);

Результат:

C:\OpenServer\domains\myproject.loc\www\arrays.php:10: array (size=3) "title" => string "Название статьи" (length=29) "text" => string "Текст статьи" (length=23) "author" => array (size=2) "first_name" => string "Иван" (length=8) "last_name" => string "Иванов" (length=12)

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

"Название статьи", "text" => "Текст статьи", "author" => [ "first_name" => "Иван", "last_name" => "Иванов" ] ]; echo $article["author"]["first_name"];

Сначала в массиве $article получили значение по ключу author, этим значением оказался массив. А затем уже из этого массива получили значение по ключу first_name. И результат этого кода, разумеется:

Иван

Давайте теперь используем эти значения в уже использованном нами шаблоне:

"Название статьи", "text" => "Текст статьи", "author" => [ "first_name" => "Иван", "last_name" => "Иванов" ] ]; ?> <?= $article["title"] ?>

Результат:

Разумеется, можно и внутри этого значения создать массив, а внутри него – ещё один, пока не надоест.

В следующем уроке мы рассмотрим более сложные и интересные примеры работы с массивами.

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

Простые массивы используют ключи только для разделения элементов и не имеют практической ценности:

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

"Владимир", "age" => 20]; ?>

Двумерные и многомерные массивы

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

"Вася"]; $human["hands"] = ["left", "right"]; print_r($human); ?>

Как видите, мы создали массив $human , а затем внутри него создали ещё один массив $human["hands"] . Результат в браузере:

Array ( => Вася => Array ( => left => right))

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

Практическое применение многомерных массивов

Помните, на предыдущем уроке мы хотели сгруппировать товары и их характеристики? Напомню код, который у нас получился:

Теперь мы можем поместить всю эту информацию в одну переменную. При этом каждый товар будет представлять собой ассоциативный массив, а все товары будут находиться внутри простого массива:

"iPhone", "price" => 5000, "quantity" => true ], [ "name" => "Samsung Galaxy", "price" => 5000, "quantity" => true ], [ "name" => "Nokia Lumia", "price" => 4000, "quantity" => true ] ]; ?>

Или альтернативный вариант:

"iPhone", "price" => 5000, "quantity" => true ]; $products = [ "name" => "Samsung Galaxy", "price" => 5000, "quantity" => true ]; $products = [ "name" => "Nokia Lumia", "price" => 4000, "quantity" => true ]; ?>

Результатом обоих вариантов будет:

Array ( => Array ( => iPhone => 5000 => 1) => Array ( => Samsung Galaxy => 5000 => 1) => Array ( => Nokia Lumia => 4000 => 1))

1. Создайте массив $city , добавьте в него ключ name с любым значением. 2. Создайте подмассив streets с любыми случайными улицами. Каждая улица должна иметь имя (name) и количество домов (buildings_count), а также подмассив из номеров домов (old_buildings), подлежащих сносу.