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

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

На этом все. Удачи вам и до скорых встреч на страницах блога

Последнее обновление: 1.11.2015

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

Samsung Galaxy ACE II"; $phones = "Sony Xperia Z3"; $phones = "Samsung Galaxy III"; for($i=0;$i"; ?>

Здесь создается массив $phones из четыре элементов. Каждый элемент в массиве представляет собой пару ключ - значение . Так, первый элемент $phones = "Nokia N9" имеет ключ - число 0, а значение - строку "Nokia N9". В таких массивах числовые ключи еще называются индексами.

С помощью функции count() можно узнать количество элементов в массиве. А благодаря тому, что ключи идут по порядку от 0 до 3, и зная размер массива, можно вывести элементы массивы в цикле for .

Чтобы было более понятно отношения ключей и значений элементов, выведем массив с помощью функции print_r :

Print_r($phones);

У нас получится следующий вывод:

Array ( => Nokia N9 => Samsung Galaxy ACE II => Sony Xperia Z3 => Samsung Galaxy III)

Данное создание массива будет также эквивалентно следующему:

"; ?>

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

Зная ключ элемента в массиве, мы можем обратиться к этому элементу, получить или изменить его значение:

// получим элемент по ключу 1 $myPhone = $phones; echo "$myPhone
"; // присвоение нового значения $phones = "Samsung X650"; echo "$phones
";

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

Подобные массивы еще называют ассоциативными.

Оператор array

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

Оператор array() принимает набор элементов. Здесь также явным образом не указаны ключи. Поэтому PHP автоматически нумерует элементы с нуля. Но мы также можем указать для каждого элемента ключ:

"iPhone5", "samsumg"=>"Samsung Galaxy III", "nokia" => "Nokia N9", "sony" => "Sony XPeria Z3"); echo $phones["samsumg"]; ?>

Операция => позволяет сопоставить ключ с определенным значением.

Перебор ассоциативных массивов

Выше мы посмотрели, как с помощью цикла for вывести все элементы массива, где ключи заданы последовательно числами от 0 до 3. Однако с ассоциативными массивами это не работает. И для них в PHP предназначен специальный тип цикла - foreach...as :

"iPhone5", "samsumg"=>"Samsung Galaxy III", "nokia" => "Nokia N9", "sony" => "Sony XPeria Z3"); foreach($phones as $item) echo "$item
"; ?>

В цикле foreach из массива последовательно извлекаются все элементы и их значение помещается в переменную, указанную после ключевого слова as . В данном случае в переменную $item по очереди помещаются все четыре значения из массива $phones. Когда будет извлечен последний элемент из массива, цикл завершается.

Цикл foreach позволяет извлекать не только значения, но и ключи элементов:

"iPhone5", "samsumg"=>"Samsung Galaxy III", "nokia" => "Nokia N9", "sony" => "Sony XPeria Z3"); foreach($phones as $key=>$value) echo "$key => $value
"; ?>

Здесь при переборе элементов цикла в переменную $key будет передаваться ключ элемента, а в переменную $value ее значение.

Альтернативу циклу foreach представляет использование функций list и each :

"iPhone5", "samsumg"=>"Samsung Galaxy III", "nokia" => "Nokia N9", "sony" => "Sony XPeria Z3"); while (list($key, $value) = each($phones)) echo "$key => $value
"; ?>

Цикл while будет работать, пока функция each не вернет значение false . Функция each проходит по всем элементам массива $phones и получает его в виде массива, в который входят ключ и значение элемента. Затем этот массив передается функции list и проиcходит присваивает значения массива переменным внутри скобок. Когда функция each закончит перебор элементов массива $phones, она возвратит false , и действие цикла while будет завершено.

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

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

array("iPhone5", "iPhone5s", "iPhone6") , "samsumg"=>array("Samsung Galaxy III", "Samsung Galaxy ACE II"), "nokia" => array("Nokia N9", "Nokia Lumia 930"), "sony" => array("Sony XPeria Z3", "Xperia Z3 Dual", "Xperia T2 Ultra")); foreach ($phones as $brand => $items) { echo "

$brand

"; echo "
    "; foreach ($items as $key => $value) { echo "
  • $value
  • "; } echo "
"; } ?>

И при выводе мы получим 4 списка:

Чтобы обратиться к элементу данного, также надо указать ключи в квадратных скобках. Например, обратимся к первому элементу в первом массиве. Так как ключ первого массива - "apple", а ключ первого элемента в первом массиве - число 0 (так как мы явным образом не указали ключи):

Echo $phones["apple"];

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

Echo $phones["nokia"];

Допустим, вложенные массивы также представляют ассоциативные массивы:

array("apple" => "iPhone5", "samsumg" => "Samsung Galaxy III", "nokia" => "Nokia N9"), "tablets" => array("lenovo" => "Lenovo IdeaTab A3500", "samsung" => "Samsung Galaxy Tab 4", "apple" => "Apple iPad Air")); foreach ($technics as $tovar => $items) { echo "

$tovar

"; echo "
    "; foreach ($items as $key => $value) { echo "
  • $key: $value
  • "; } echo "
"; } // присвоим одному из элементов другое значение $technics["phones"]["nokia"] = "Nokia Lumnia 930"; // выведем это значение echo $technics["phones"]["nokia"]; ?>

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

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

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

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

"Владимир", "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), подлежащих сносу.