Php ассоциативный массив в индексный. Использование многомерных массивов в PHP. Стандартная PHP библиотека

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

Существует три разных типа массивов, и каждое значение массива доступно с помощью идентификатора c, который называется индексом массива.

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

Числовой массив

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

Пример

Ниже приведен пример создания и доступа к числовым массивам.

Здесь мы использовали функцию array() для создания массива. Эта функция объясняется в описании функций.

Value is 1
Value is 2
Value is 3
Value is 4
Value is 5
Value is one
Value is two
Value is three
Value is four
Value is five

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

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

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

ПРИМЕЧАНИЕ . Не сохраняйте ассоциативный массив внутри двойной кавычки во время печати, иначе он не вернет никакого значения.

Пример

2000, "qadir" => 1000, "zara" => 500); echo "Salary of mohammad is ". $salaries["mohammad"] . " "; echo "Salary of qadir is ". $salaries["qadir"]. " "; echo "Salary of zara is ". $salaries["zara"]. " "; /* Second method to create array. */ $salaries["mohammad"] = "high"; $salaries["qadir"] = "medium"; $salaries["zara"] = "low"; echo "Salary of mohammad is ". $salaries["mohammad"] . " "; echo "Salary of qadir is ". $salaries["qadir"]. " "; echo "Salary of zara is ". $salaries["zara"]. " "; ?>

Это приведет к следующему результату -

Salary of mohammad is 2000
Salary of qadir is 1000
Salary of zara is 500
Salary of mohammad is high
Salary of qadir is medium
Salary of zara is low

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

Многомерный массив каждый элемент в основном массиве также может быть массивом. И каждый элемент в sub-массиве может быть массивом и так далее. Значения в многомерном массиве доступны с использованием нескольких индексов.

Пример

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

array ("physics" => 35, "maths" => 30, "chemistry" => 39), "qadir" => array ("physics" => 30, "maths" => 32, "chemistry" => 29), "zara" => array ("physics" => 31, "maths" => 22, "chemistry" => 39)); /* Accessing multi-dimensional array values */ echo "Marks for mohammad in physics: " ; echo $marks["mohammad"]["physics"] . " "; echo "Marks for qadir in maths: "; echo $marks["qadir"]["maths"] . " "; echo "Marks for zara in chemistry: " ; echo $marks["zara"]["chemistry"] . " "; ?>

Это приведет к следующему результату -

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

Как создать простой массив в 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 можно представить такую структуру в виде массива. Корзина – это сам массив, а конкретные фрукты – это его элементы.

Давайте теперь создадим в папке с нашим проектом файл для наших экспериментов с массивами. Назовём его 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"] ?>

Результат:

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

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

Доброго времени суток, хабражители!

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

array("key1" => "value1", "key2" => "value2")); ?>

То, конечно, получить, интересующие нас значения, легко:

Echo $array["dimension1"]["key1"]; // value1

Но, а если мы имеем массив n-мерный? Например, пятимерный:

$array = array("dimension1" => array("dimension2" => array("dimension3" => array("dimension4" => array("dimension5" => array("value1" => "Hey! I\"m value1", "value2" => "Hey! I\"m value2"))))));

То, чтобы получить значение по ключу, например, «value1», нам надо прописать такой код:

Echo $array["dimension1"]["dimension2"]["dimension3"]["dimension4"]["dimension5"]["value1"]; // Hey! I"m value1

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

Echo easyA($array)->dimension1->dimension2->dimension3->dimension4->dimension5->value1; // Hey! I"m value1

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

Итак, для начала нам понадобится создать класс, который будет обрабатывать наш массив. Назовем его easyArray и сделаем его одиночкой (Singleton):

Код

class easyArray{ private static $instance; // Состояние класса. private $Array; // Массив, который был передан классу. private function __construct(){ // Запилили конструктор. } private function __clone(){ // Запилили метод клонирования. } public static function getInstance(){ if(null === self::$instance){ self::$instance = new self(); } return self::$instance; }

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

Код

public function loadArray($newArray){ if(is_array($newArray)){ $this->Array = $newArray; return $this; }else{ $error = "К сожалению вы передали не массив."; throw new Exception($error); } }
Из кода видно, что мы также осуществляем проверку того, что было передано на вход метода. В случае того, если был передан все-таки не массив, мы просто выбросим исключение с ошибкой "К сожалению вы передали не массив .". Если проверка прошла успешно, то мы записываем в приватную переменную полученный массив и возвращаем текущий объект.

Ну а теперь мы переопределим магический метод "__get()" нашего класса. Это необходимо для того, чтобы получить желаемый нами результат. Итак:

Код

public function __get($index){ if(isset($this->Array[$index])){ if(is_array($this->Array[$index])){ $this->loadArray($this->Array[$index]); return $this; }else{ return $this->Array[$index]; } }else{ $error = "Отсутствует ключ (".$index.") в массиве"; throw new Exception($error); } }

Первым делом, мы проверяем наличие запрошенного ключа в массиве, в случае отсутствия такового, выбрасываем исключение с ошибкой ""Отсутствует ключ (".$index.") в массиве" ". Далее проверяем является ли, запрошенный ключ массивом. Если по такому ключу в массиве находится значение, то просто возвращаем это значение. А если все-таки это массив, то мы отправляем его методу "loadArray($newArray) " и возвращаем текущий объект ($this).

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

Код

public function arrayReturn(){ return $this->Array; }

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

Echo easyArray::getInstance()->loadArray($array)->dimension1->dimension2->dimension3->dimension4->dimension5->value1; // Hey! I"m value1

Стало даже длиннее, чем было. Но эта проблема решаема, и для этого нам понадобится простая функция:

Function easyA($newArray){ return easyArray::getInstance()->loadArray($newArray); }

Ну, а теперь проверим, что мы получили в итоге:

Код

array("dimension2" => array("dimension3" => array("dimension4" => array("dimension5" => array("value1" => "Hey! I\"m value1", "value2" => "Hey! I\"m value2")))))); require_once("easyArray.php"); require_once("easyArrayFunction.php"); echo easyA($array)->dimension1->dimension2->dimension3->dimension4->dimension5->value1; // Hey! I\"m value1 echo easyA($array)->dimension1->dimension2->dimension3->dimension4->dimension5->value2; // Hey! I\"m value2 ?>
Все работает, как и задумывалось.

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

Код

array("dimension2" => array("dimension3" => array("dimension4" => array("dimension5" => array("value1" => "Hey! I\"m value1 from file array.php", "value2" => "Hey! I\"m value2 from file array.php")))))); ?>


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

Код

echo easyA(require_once("array.php"))->dimension1->dimension2->dimension3->dimension4->dimension5->value1; // Hey! I"m value1 from file array.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.