Основы PHP — Массивы. Индексные, ассоциативные и многомерные массивы. Создание массивов в PHP. Простой, многомерный, ассоциативный Php ассоциативный массив по индексу

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

Массивы PHP – Что такое массивы PHP и как они создаются. Простые (индексные) массивы

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

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

/*Создание массива*/ $name = "A"; $name = "B"; $name = "C"; $name = "D"; $name = "E"; /*Вывод значения ячейки массива с индексом 2 на экран*/ echo $name;

В примере выше видно, что сначала мы создаем первый элемент массива с индексом «0» и присваиваем ему значение «А». Затем аналогичным образом создаем остальные 4 элемента массива. После этого при помощи оператора echo мы выводим третий элемент массива на экран. Как вы уже заметили, для того, чтобы вывести элемент массива на экран, нужно указать имя массива и индекс ячейки с данными.

Кроме вышеприведенного способа, массив в php можно создать другим способом. Суть его состоит в использовании ключевого слова array . Для наглядности давайте рассмотрим тот же пример создания массива, но уже другим способом.

$name = array (0 => "A", 1 => "B", 2 => "C", 3 => "D", 4 => "E");

Этот способ тоже очень простой. Для создания массива мы создаем переменную $name, затем ставим знак присваивания «=» и указываем что это массив (array). После этого создаем ячейки и заполняем их данными. Делается это при помощи указания индекса и присвоения ему значения при помощи знаков «=» и «>». То есть «0 => «A»» означает, что ячейке с индексом «0» мы присваиваем значение «А». Немного неудобно объяснять эту тему текстово но, думаю, вы поняли о чем идет речь.

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

Первый вариант создания массивов в PHP

$name = "A"; $name = "B"; $name = "C"; $name = "D"; $name = "E";

Второй вариант создания массивов в PHP

$name = array("A", "B", "C", "D", "E");

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

Ассоциативные массивы есть еще одной разновидностью массивов PHP. Отличием ассоциативных массивов от простых являются индексы. Если в простых массивах это были числовые индексы, то ассоциативных эти индексы текстовые. Это делает ассоциативные массивы более упорядоченными и осмысленными. Благодаря этому они более широко применяются нежели простые индексные.

Создаются ассоциативные массивы аналогичным образом. Рассмотрим 2 основных способа.

Первый способ создания ассоциативного массива.

$color["white"] = "белый"; $color["black"] = "черный"; $color["red"] = "красный"; $color["green"] = "зеленый"; $color["blue"] = "синий";

Второй способ создания ассоциативного массива.

$color = array("white" => "белый", "black" => "черный", "red" => "красный", "green" => "зеленый", "blue" => "синий");

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

Echo "Выбранный цвет - $color"; echo "Выбран ".$color["red"]." цвет";

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

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

Теперь давайте перейдем к заключительной части статьи и рассмотрим многомерные массивы PHP.

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

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

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

$massiv["Стационарный ПК"] = array ("ОЗУ" => "4096", "HDD" => "500", "ГЦ" => "3"); $massiv["Ноутбук"] = array ("ОЗУ" => "3072", "HDD" => "320", "ГЦ" => "2"); $massiv["Нетбук"] = array ("ОЗУ" => "2048", "HDD" => "250", "ГЦ" => "1,6");

Для того чтобы в PHP вывести элемент многомерного массива на экран достаточно использовать оператор вывода echo и метод пристыковки переменных, так как в противном случае (без пристыковки переменных) элемент многомерного массива не выведется на экран. Это еще одно отличие при работе с многомерными массивами PHP.

Echo "Стационарный ПК с объемом ОЗУ ".$massiv["Стационарный ПК"]["ОЗУ"]." и объемом жесткого диска ".$massiv["Стационарный ПК"]["HDD"]." имеет частоту процессора " .$massiv["Стационарный ПК"]["ГЦ"]. " ГЦ.";

Теперь давайте подведем итог всему вышесказанному.

В рамках данной статьи мы рассмотрели три вида массивов – индексные, ассоциативные и многомерные. Узнали, как создавать массивы в 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"] ?>

Результат:

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

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

Массив - это структура данных, которая сохраняет один или несколько одинаковых значений в одном значении. Например, если вы хотите сохранить 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. На мой взгляд, не всегда удобно получать необходимую информацию из многомерного массива. Одно дело если массив двумерный:

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

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

Сразу же хочу обратить ваше внимание на данные (да, я специально их так записал 🙂). Данные типа строка, или 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 ?>

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




Top