наверх

Массивы

Массив — это нумерованный набор переменных. Другими словами массив это большая переменная, которая содержит в себе много других переменных. Где их используют? Их удобно использовать при группировке данных. Переменная в массиве называется элементом массива, а ее позиция задется индексом. Общее число элементов в массиве называется размером массива.

Нумерация элементов массива начинается с нуля.

Массивы, индексом которых являются числа, часто называют списками.

Пример списка:

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

Главное отличие ассоциативных массивов от списков — возможность обращения к элементу массива не по числовому индексу, а по индексу, представляющему собой строку(ассоциацию). Индексы ассоциативного массива называются ключами. Пример ассоциативного массива:

Инициализация массива

Массив можно инициализировать поэлементно:

Операция [] всегда добавляет элемент в конец массива, присваивая ему при этом такой числовой индекс, который бы не конфликтовал с уже имеющимися в массиве(т.е. выбирается номер, превосходящий все имеющиеся цифровые ключи в массиве).

Кроме этого можно воспользоваться инструкцией list() — она позволяет присваивать переменным значения элементов массива:

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

Существует еще один способ инициализации функции array():

Ддя ассоциативного массива:

Можно использовать сокращенную запись:

Массивы на экран выводятся оператором print_r(). С его помощью выведем содержание массива $Mass на экран следующим образом:

Должно получиться:

Давайте разберемся что же все это значит. Array — это обозначение типа данных т.е. в нашем случае массива. Далее выводятся все 5 элементов заложенные нами в этот массив. Цифры в квадратных скобках — это ключи каждого элемента массива или можно сказать нумерация элементов массива. При инициализации массива можно сразу же указать индексы элементов( и вовсе не обязательно соблюдать порядок нумерации):

Если же индекс не указывать(как показано в предыдущем примере) то, PHP автоматически присвоит элементу индекс, на единицу больше последнего, т.е. добавит элемент в конец массива.

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

Получение и изменение элемента массива

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

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

Получить число элементов массива можно с помощью функции count():

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

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

Доступ к элементу такого массива осуществляется путем указания двух ключей:

После этого на экране увидим цифру 1980.

Слияние массивов

Для слияния двух ассоциативных массивов предусмотрен оператор +:

В этом примере массив $Animals будет содержать все элементы массивов $Ket и $Dog.Причем порядок следования элементов будет зависеть от порядка, в котором массивы сливаются. Так проявляется направленность массивов, она заставляет оператор + стать некоммутативным, т.е. $Ket + $Dog не равно $Dog + $Ket.

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

Теперь массив $Mass3 содержит все элементы массивов $Mass1 и $Mass2.

Если один из параметров в функции array_merge() не является массивом, интерпретатор выведет сообщение об ошибке.

Перебор массива

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

С ассоциативным массивом все немного сложнее. Рассмотрим пример:

В массивах есть такое понятие как текущий элемент. Функция reset() просто устанавливает этот элемент на первую позицию в массиве. Функция key() возвращает ключ, который имеет текущий элемент. Функция next() перемещает текущий элемент на одну позицию вперед.

Помимо своей основной задачи, функции reset() и next(), возвращают некоторые значения:

  • reset() — возвращает значение первого элемента массива (false если массив пуст);
  • next() — возвращает значение элемента, следующего за текущим (fals если такого элемента нет).

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

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

Гораздо удобнее использовать метод прямого перебора. Суть метода заключается в том, чтобы сразу на каждом «витке» цикла одновременно получать и ключ, и значение текущего элемента. Не будем описывать устаревший способ перебора с помощью функции each() и перейдем к foreach.

Перебор циклом foreach

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

Подробнее ознакомиться с механизмом работы данного цикла можно в статье о циклах.

Функция explode() и implode()

Данные функции часто используют при работе с массивами.

  • explode() — служит для разбиения какой-либо строки на более мелкие части (например, эти части разделяются в строке спецсимволом)
  • implode() — служит слияния нескольких небольших строк в одну большую, причем не впритык, а вставляя между ними разделитель

Синтаксис explode():

Функция получает строку, заданную в ее втором аргументе, и пытается найти в ней подстроки, равные первому аргументу. Затем по месту вхождения этих подстрок строка «разрезается» на части, помещаемые в массив-список, который возвращается в результате. Если задан параметр $limit, то учитываются только первые($limit-1) участков «разреза». Таким образом, возвращается список из не более чем $limit элементов. Это позволяет нам проигнорировать возможное наличие разделителя в тексте последнего поля, если мы знаем, что всего полей, скажем, 6. Вот пример:

Строкой разбиения может быть не только один символ, но и небольшая строка.

Синтаксис implode():

Она получает ассоциативный массив $List, заданный во втором параметре, и «склеивают» его значения при помощи «строки-клея» $glue из первого параметра. Вместо списка во втором аргументе можно передавать любой ассоциативный массив — в этом случае будут рассматриваться только его значения.