Массивы в PHP. Изучаем массивы в PHP Php многомерные массивы с числовым индексом

На уроке будут рассмотрены возможности по работе с массивами в php, объявление массива, виды массивов: многомерные и ассоциативные массивы

  1. Массивы с числовыми индексами
  2. $fruits="яблоко"; $fruits="груша"; $fruits="апельсин"; $fruits="абрикос";

    Данный вариант инициализации массива сегодня практически не используется. Используется следующий вариант работы с массивами:

  3. Ассоциативный массив
  4. Данный вариант создания массива использует объект array:

    $fruits = array(1 => "яблоко", 2 => "груша", 3 => "апельсин", 4 => "абрикос"); // Начиная с версии PHP 5.4 $fruits = array[ 1 => "яблоко", 2 => "груша", 3 => "апельсин", 4 => "абрикос" ];

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

    1 2 3 4 5 6 7 8 $fruits [ 0 ] = "яблоко" ; $fruits [ 1 ] = "груша" ; $fruits [ 2 ] = "апельсин" ; $fruits [ 3 ] = "абрикос" ; echo "Первый элемент массива - " . $fruits [ 0 ] . "
    " ; echo "Второй элемент массива - " . $fruits [ 1 ] . "
    " ; echo "Третий элемент массива - " . $fruits [ 2 ] . "
    " ;

    $fruits="яблоко"; $fruits="груша"; $fruits="апельсин"; $fruits="абрикос"; echo "Первый элемент массива - ". $fruits ."
    "; echo "Второй элемент массива - ". $fruits ."
    "; echo "Третий элемент массива - ". $fruits ."
    ";

    Результатом выполнения программы будет:

    Важно: В качестве индекса элемента в ассоциативном массиве может быть не число, а слово (тип string )

    Рассмотрим пример:

    Пример: Создать массив student со значениями имен, фамилий и возраста студентов. Вывести на экран значения элементов массива

    $student = array("Name" => John, "Surname" => Smith, "Age" => 20); echo "имя пользователя " . $student["Name"] . "


    ";

    $student["Name"] = "John"; $student["Surname"] = "Smith"; $student["Age"] = 20; echo "имя пользователя " . $student["Name"] . "
    "; echo "фамилия пользователя " . $student["Surname"] . "
    "; echo "возраст пользователя " . $student["Age"] . "
    ";

    Результат:

    Важно: Строковые ключи (индексы) нужно всегда заключать в кавычки

    Индексированные массивы без ключа:

    Также следует учесть, что индексы в массиве вообще можно не писать при инициализации массива значениями. Тогда мы создаем так называемый массив-коллекцию (объект-коллекцию ):

    $student = array ("John" , "Smith" , 20 ) ;

    $student = array("John","Smith", 20);

    В таком случае интерпретатор сам присвоит им числовые индексы, начиная с 0

    Пример преобразования типов и перезаписи элементов.
    Обратите внимание на использование процедуры var_dump()

    1 2 3 4 5 6 7 8 9 "a" , "1" => "b" , 2 => "c" , 2 => "d" , ) ; var_dump ($my_array ) ; ?>

    "a", "1"=> "b", 2 => "c", 2 => "d",); var_dump($my_array); ?>

    Результат:

    Array(3) { => string(1) "a" => string(1) "b" => string(1) "d" }

    Пример использования многомерного массива и организации доступа к его элементам

    1 2 3 4 5 6 7 8 9 10 11 12 "1" , 2 => 2 , "multi" => array ( "1_1" => "1_1" ) ) ; var_dump ($array_odnom [ "first" ] ) ; var_dump ($array_odnom [ 2 ] ) ; var_dump ($array_odnom [ "multi" ] [ "1_1" ] ) ; ?>

    "1", 2 => 2, "multi" => array("1_1" => "1_1")); var_dump($array_odnom ["first"]); var_dump($array_odnom ); var_dump($array_odnom ["multi"]["1_1"]); ?>

    Результат:

    String(1) "1" int(2) string(3) "1_1"

    Пример: создать двумерный массив размерностью 3 х 2. Заполнить его значениями для первой строки: «1_1», «1_2», «1_3»; для второй строки: «2_1», «2_2», «2_3». Вывести на экран первый элемент массива


    Выполнение:
    1 2 3 4 5 6 7 8 9 10 11 12 $array_odnom = array ( 1 => array ( 1 => "1_1" , 2 => "1_2" , 3 => "1_3" ) , 2 => array ( 1 => "2_1" , 2 => "2_2" , 3 => "2_3" ) , ) ; echo $array_odnom [ 1 ] [ 1 ] ;

    $array_odnom = array(1 => array(1 => "1_1", 2 => "1_2", 3 => "1_3"), 2 => array(1 => "2_1", 2 => "2_2", 3 => "2_3"),); echo $array_odnom;

    Задание php2_1: создайте двумерный массив 3 х 3 — верхний левый угол таблицы умножения Пифагора(1, 2, 3; 4, 6, 8 …)



    Лабораторная работа:
    Допустим, у Вас есть какое-то объявление и несколько разных людей, которым нужно это объявление отправить. Для этого Вы делаете заготовку с содержанием объявления, внутри которого есть ряд изменяющихся параметров: массива имен людей и массив событий. Вывести один вариант итогового объявления на экран. Для задания массивов использовать и ассоциативный массив.

    Используйте шаблон объявления и ориентируйтесь по цветам:

    Красным – массивы.
    Коричневым – числовая переменная.
    Синим – константа.

    Уважаемый (ая), Иван Иванович !
    Приглашаем Вас на день открытых дверей .
    Дата события: 12 мая.
    С уважением, Василий.


    Дополните код:
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 // объявление константы define ("SIGN" , "С уважением, Вася" ) ; // массив для имен адресатов $names = array (... ) ; // массив для событий $events = array ( "op_doors" => "день открытых дверей" , "vistavka" => "выставку" , ... ) ; $str = "Уважаемый(ая), $names !
    "
    ; $str .= ...; $str .= ...; echo ...;

    // объявление константы define("SIGN","С уважением, Вася"); // массив для имен адресатов $names = array(...); // массив для событий $events = array("op_doors" => "день открытых дверей", "vistavka" => "выставку", ...); $str = "Уважаемый(ая), $names!
    "; $str .= ...; $str .= ...; echo ...;

В этой статье мы продолжаем изучать основы 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Samsung Galaxy"; $product2_price = 5000; $product2_quantity = true; $product3_name = "Nokia Lumia"; $product3_price = 4000; $product3_quantity = true; ?>

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

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

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

В своей статье я хочу поговорить об обработке многомерных ассоциативных массивов в 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

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

Спасибо за внимание.