Создание многомерного массива php. Объявление массива в php, виды массивов и работа с элементами

Компьютер 11.04.2024

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

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

Двумерный массив - массив, который в качестве значений хранит в себе другие массивы. Рассмотрим создание двумерного массива с помощью конструктора array() :

$flowers = array(array("розы", 100 , 15), array("тюльпаны", 60 , 25), array("орхидеи", 180 , 7));

Массив $flowers содержит три массива. Как вы помните, для доступа к элементам одномерного массива надо указывать имя массива и ключ. То же самое верно и в отношении двумерных массивов, с одним исключением: каждый элемент имеет два ключа: первый для выбора строки, второй для выбора столбца.

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

Ручной доступ к элементам
"; echo $flowers." цена ".$flowers." количество ".$flowers."
"; echo $flowers." цена ".$flowers." количество ".$flowers."
"; echo "

Использование циклов для вывода элементов

"; echo "
    "; for ($row = 0; $row < 3; $row++) { echo "
  1. Номер строки $row"; echo "
      "; for ($col = 0; $col < 3; $col++) { echo "
    • ".$flowers[$row][$col]."
    • "; } echo "
    "; echo "
  2. "; } echo "
"; ?>

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

$flowers = array(array("Название" => "розы", "Цена" => 100, "Количество" => 15), array("Название" => "тюльпаны", "Цена" => 60, "Количество" => 25,), array("Название" => "орхидеи", "Цена" => 180, "Количество" => 7));

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

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

"розы", "Цена" => 100, "Количество" => 15), array("Название" => "тюльпаны", "Цена" => 60, "Количество" => 25,), array("Название" => "орхидеи", "Цена" => 180, "Количество" => 7)); echo "

Ручной доступ к элементам ассоциативного массива

"; for ($row = 0; $row < 3; $row++) { echo $flowers[$row]["Название"]." цена ".$flowers[$row]["Цена"] ." количество ".$flowers[$row]["Количество"]; echo "
"; } echo "

Использование цикла foreach для доступа к элементам

"; echo "
    "; for ($row = 0; $row < 3; $row++) { echo "
  1. Номер строки $row"; echo "
      "; foreach($flowers[$row] as $key => $value) { echo "
    • ".$value."
    • "; } echo "
    "; echo "
  2. "; } echo "
"; ?>

Необязательно использовать для создания двумерного массива конструктор array() , можно воспользоваться и коротким синтаксисом - квадратными скобками:

$flowers = [ [ "Название" => "розы", "Цена" => 100, "Количество" => 15 ], [ "Название" => "тюльпаны", "Цена" => 60, "Количество" => 25, ], [ "Название" => "орхидеи", "Цена" => 180, "Количество" => 7 ] ];

Трёхмерные массивы

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

Трёхмерный массив характеризует ширину, высоту и глубину. Если представлять двумерный массив в виде таблицы, то трёхмерный добавляет к этой таблице слои. Каждый элемент такого массива будет ссылаться на слой, строку и столбец.

Если немного модифицировать наш массив с цветами, то можно переделать его в трёхмерный. В коде, представленном ниже видно, что трёхмерный массив - массив, содержащий массив массивов:

$flowers = [ [ ["розы", 100 , 15], ["тюльпаны", 60 , 25], ["орхидеи", 180 , 7] ], [ ["розы", 100 , 15], ["тюльпаны", 60 , 25], ["орхидеи", 180 , 7], ], [ ["розы", 100 , 15], ["тюльпаны", 60 , 25], ["орхидеи", 180 , 7] ] ];

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

"; for ($layer = 0; $layer < 3; $layer++) { echo "

  • Номер слоя $layer"; echo "
      "; for ($row = 0; $row < 3; $row++) { echo "
    • Номер строки $row"; echo "
        "; for ($col = 0; $col < 3; $col++) { echo "
      • ".$flowers[$layer][$row][$col]."
      • "; } echo "
      "; echo "
    • "; } echo "
    "; echo "
  • "; } echo ""; ?>

    Продолжаем изучение массивов. В прошлых статьях мы уже научились объявлять массивы; разобрались: для чего они нужны и где могут использоваться; познакомились с многомерными и ассоциативными массивами. Теперь самое время поговорить о переборе элементов массива.
    Зачастую бывает необходимо перебрать все элементы массива и проделать с ними какое-либо действие.

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

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

    Для начала поговорим о переборе элементов массива при помощи циклов.

    Для этого используются 3 вида циклов for, foreach и while .

    Перебор элементов массива. Цикл for()

    Для перебора элементов массива-списка, можно сделать следующее:

    1. Сначала мы объявляем сам массив;

    3. После объявляем цикл for , где в круглых скобках устанавливаем счетчик (объявляется переменная «i» со значением ноль, если эта переменная меньше общего числа элементов массива, то каждую итерацию значение «i» будет увеличиваться на единицу);

    4. А в теле цикла уже можно прописать, что делать с каждым элементом массива. Можно, например, просто вывести их на экран.

    Все вышеперечисленное иллюстрирует следующий код:

    "; } ?>

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

    Цикл for и ассоциативные массивы

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

    Чтобы перебрать элементы ассоциативного массива в цикле for можно воспользоваться следующей конструкцией:

    " .$Mass[$key] . "
    "; } ?>

    Как видите, мы объявили ассоциативный массив.

    reset() – устанавливает указатель на первый элемент массива;

    next() – перемещает указатель на один элемент массива вперед;

    key() – возвращает ключ текущего элемента массива.

    А потом в теле цикла мы выводим индекс элемента массива, стрелку и значение элемента массива. Каждую пару индекс-значение выводим с новой строки.

    Также вместо reset() можно использовать end() , тогда указатель будет установлен на последний элемент массива. Но в таком случае нужно и вместо next() использовать prev() , чтобы перемещать указатель не вперед, а назад.

    Так мы можем перебрать элементы ассоциативного массива в обратном порядке.

    Как Вы, наверное, знаете, цикл for используется далеко не только для работы с массивами.

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

    Перебор элементов массива. Цикл foreach()

    Цикл foreach() позволяет нам работать как с обычными массивами-списками, так и с ассоциативными.

    Вот пример работы цикла для перебора элементов простого массива-списка с выводом всех значений элементов массива на экран.

    "; } ?>

    В итоге на экране мы увидим все значения элементов этого массива.

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

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

    $value) { echo $key . "=>" . $value . "
    "; } ?>

    И в данном случае мы увидим на экране пару: ключ – значение, между которыми будет стрелка.

    Перебор элементов массива. Цикл while()

    Еще один цикл, который мы можем использовать для перебора всех элементов массива – это цикл while() .

    При этом нам помогут еще две функции, которые мы будет использовать совместно с этим циклом. Это функции list() и each() .

    В случае с массивами-списками мы будем использовать данный цикл - вот так:

    "; } ?>

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

    Здесь функция each() возвращает текущий элемент массива, а после перемещает указатель.

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

    " . $value . "
    "; } ?>

    Вот так мы получим и ключи и значения.

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

    Можно осуществлять перебор элементов массива и без использования циклов. Для этого мы будем использовать специальную функцию array_walk() .

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

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

    " . $value . "
    "; } $Mass["One"] = 5; $Mass["Two"] = 10; $Mass["Three"] = 15; array_walk($Mass, "f_print"); ?>

    В итоге на экране мы увидим следующее.

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

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

    В следующей статье мы поговорим о добавлении и удалении элементов массива в разные его места.

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

    С Вами была Анна Котельникова. Успехов и до новых встреч!

    (массив в массиве, матрица)
    5. Функции для работы с массивами (массив в массиве, матрица)

    Что такое массив PHP?

    Начать данную тему хотелось бы с отречённых примеров. Допустим, мы рассматриваем какого-либо человека . У него есть имя, фамилия, адрес, телефон, пол, рост, цвет глаз и так далее. Информацию по всем этим пунктам можно отнести к массиву данных о человеке.

    Массив может быть другого типа, без какой-либо конкретики по пунктам. Будет только тема. Допустим, это web-прграммирование . А в качестве элементов будут языки - HTML , CSS , JavaScript , PHP , MySQL . Всего 5 элементов.

    Исходя из последнего примера предположим массив:

    web-программирование
    1. HTML
    2. CSS
    3. JavaScript
    4. PHP
    5. MySQL

    Теперь смотрим на данный пример и анализируем основные понятия.

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

    Массив в данном примере будет называться web-программирование .

    У каждого элемента есть своё порядковое место, идентификатор.
    Индекс (ключ массива) - либо порядковый номер, либо текстовое значение, по которому можно идентифицировать элемент.

    Индексами в примере выше будут числовые значение от 1 до 5 . При обращении к индексу 2 мы увидим CSS.

    Пример массива в PHP

    Теперь давайте рассмотрим вышеуказанный пример в синтаксисе PHP, а не русского языка. Допустим массив будет называться короче - web . В квадратных скобках будет вставлять индекс.
    Давайте рассмотрим простой пример массива, где в значении индексов будут числовые значения, а создавать массив будем так, словно переменным присваиваем значения.

    $web="HTML";
    $web="CSS";
    $web="JavaScript";
    $web="PHP";
    $web="MySQL";

    $web; // данная переменная содержит массив с 5-ю элементами

    // чтобы вывести один из элементов массива достаточно указать индекс в массиве
    echo $web; // выведет PHP

    Одномерный массив

    ИНДЕКСНЫЙ МАССИВ

    Выше, с web-программированием, мы рассмотрели как раз пример одномерного массива.
    Таким способом он создаётся редко. Он скорее наглядно показывает структуру массива. Чаще прибегают к другому методу.

    $web=array("HTML","CSS","JavaScript","PHP","MySQL");
    echo $web; // выведет "HTML"
    echo $web; // выведет "JavaScript"
    echo $web; // выведет "PHP"

    Если Вы хотите задать значения индекса, то их надо указать следующим образом. Знак => является указателем для присваивания индекса значению или наоборот значению индекс.

    $web=array(1=>"HTML",2=>"CSS",3=>"JavaScript",4=>"PHP",5=>"MySQL");
    echo $web; // HTML
    echo $web; // CSS
    echo $web; // PHP
    В примере отсчёт начинается с 1. Переменная с индексом 0 вследствие этого пустая.

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

    $day="Понедельник"; // индекс 0
    $day="Вторник"; // 1
    $day="Среда"; // 2
    $day="Четверг"; // 3
    $day="Пятница"; // 4
    Можно проследить, что происходит последовательное заполнение с нуля.

    АССОЦИАТИВНЫЙ МАССИВ

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

    $user["nick"]="Logic";
    $user["name"]="Павел";
    $user["age"]="25";
    $user["sex"]="Мужской";

    $user; // переменная $user содержит массив с 4-мя элементами с буквенными индексами

    // выводим элемент массива, указывая его буквенный индекс
    echo $web["name"]; // выведет "Павел"
    Как видите, всё достаточно просто. Только значение индекса закавычиваем.

    Двумерный массив

    Если Вы пропустили первую часть с Одномерным массивом , то настоятельно советую прочитать.
    Если говорить проще, то это массив в массиве. То есть элементов большого массива является другой. Подобные массивы очень тормозят работу скрипта, загружая оперативную память, поэтому для быстрой обработки подобных групп данных созданы Базы Данных (Что такое База данных?), но о ней позже. Давайте разберём пример двумерного массива.

    // массив с названиями Частей Света
    $m = array("Европа","Азия","Африка","Америка","Австралия и Океания");

    // массив с названиями Стран
    $s = array("Россия","Украина","Беларусь","Казахстан");

    // массив с названиями Столиц
    $с = array("Москва","Киев","Минск","Астана");

    // создаём двумерный массив География
    $geography = array($m, $s, $с);
    ?>
    Во включенных массивах, как Вы обратили внимание, может быть разное количество элементов. Из части про одномерные массивы следовало, что у каждого элемента массива может быть индекс. Так давайте для каждого включённого массива присвоим своё значение.

    Для этого расширим последнюю строчку и напишем её следующим образом.

    $geography = array("Части Света"=>$m, "Страны"=>$s, "Столицы"=>$с);

    Функции работы с массивами php

    Foreach - циклическая функция для работы с массивами, в которой количество циклов равно количеству элементов массива.

    Имеет следующий вид. Код PHP

    Foreach (массив as $ключ=>$значение)
    команды;
    Ну и сразу пример работы

    // создаём массив со знаменитыми IT
    $names["Ритчи"] = "Деннис";
    $names["Томпсон"] = "Кен";
    $names["Гейтс"] = "Билл";
    $names["Джобс"] = "Стив";

    Foreach ($names as $key => $value) {
    echo "$value $key";
    }
    ?>
    На экран скрипт выведет

    Деннис Ритчи
    Кен Томпсон
    Билл Гейтс
    Стив Джобс
    Count - функция, возвращающая количество элементов в массиве.

    Echo count($names); // в нашем примере с IT вернёт значение 4
    Sort - функция, сортирующая элементы массива. Удобна в случае числовых значений индекса.
    Arsort - функция, сортирующая элементы массива в обратном порядке.

    Sort($names); // сортирует по порядку. Удобно если в Индексе числа
    arsort($names); // сортировать в обратном порядке. То есть по индексам элементы будут в порядке 3, 2, 1, 0
    Unset - функция, удаляющая элемент массива.

    Unset($massiv); // удаление элемента массива с индексом 2
    unset($massiv); // удаление массива целиком
    Array_search - функция поиска в массиве. Имеет два аргумента. Проще говоря, имеет вил array_search("что", где)

    $animals="dog";
    $animals="cat";
    $animals="bird";
    echo array_search("cat",$animals); // выведет индекс элемента - цифру 2
    Shuffle - функция, которая перемешивает ключи значений массива.

    Shuffle($animals); // выстроит элементы в случайном порядке
    Спасибо за внимание!

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

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

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

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

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

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

    "; ?>

    Здесь создается массив $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"]; ?>

    Рекомендуем почитать

    Наверх