admin / 26.01.2018

Массивы в PHP. Работа с массивами в PHP.

Массивы

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

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

<?php $phones[0] = «Nokia N9»; $phones[1] = «Samsung Galaxy ACE II»; $phones[2] = «Sony Xperia Z3»; $phones[3] = «Samsung Galaxy III»; for($i=0;$i<count($phones);$i++) echo «$phones[$i] <br />»; ?>

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

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

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

print_r($phones);

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

Array ( [0] => Nokia N9 [1] => Samsung Galaxy ACE II [2] => Sony Xperia Z3 [3] => Samsung Galaxy III)

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

<?php $phones[] = «Nokia N9»; $phones[] = «Samsung Galaxy ACE II»; $phones[] = «Sony Xperia Z3»; $phones[] = «Samsung Galaxy III»; $num = count($phones); for($i=0;$i<$num;$i++) echo «$phones[$i] <br />»; ?>

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

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

// получим элемент по ключу 1 $myPhone = $phones[1]; echo «$myPhone <br />»; // присвоение нового значения $phones[1] = «Samsung X650»; echo «$phones[1] <br />»;

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

<?php $phones[«nokia»] = «Nokia N9»; $phones[«samsumg»] = «Samsung Galaxy III»; $phones[«sony»] = «Sony Xperia Z3»; $phones[«apple»] = «iPhone5»; echo $phones[«samsumg»]; ?>

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

Оператор array

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

<?php $phones = array(‘iPhone’, ‘Samsung Galaxy S III’, ‘Nokia N9’, ‘Sony XPeria Z3’); echo $phones[1]; ?>

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

<?php $phones = array(«apple»=>»iPhone5», «samsumg»=>»Samsung Galaxy III», «nokia» => «Nokia N9», «sony» => «Sony XPeria Z3»); echo $phones[«samsumg»]; ?>

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

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

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

<?php $phones = array(«apple»=>»iPhone5», «samsumg»=>»Samsung Galaxy III», «nokia» => «Nokia N9», «sony» => «Sony XPeria Z3»); foreach($phones as $item) echo «$item <br />»; ?>

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

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

<?php $phones = array(«apple»=>»iPhone5», «samsumg»=>»Samsung Galaxy III», «nokia» => «Nokia N9», «sony» => «Sony XPeria Z3»); foreach($phones as $key=>$value) echo «$key => $value <br />»; ?>

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

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

<?php $phones = array(«apple»=>»iPhone5», «samsumg»=>»Samsung Galaxy III», «nokia» => «Nokia N9», «sony» => «Sony XPeria Z3»); while (list($key, $value) = each($phones)) echo «$key => $value <br />»; ?>

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

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

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

<?php $phones = array( «apple»=> 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 «<h3>$brand</h3>»; echo «<ul>»; foreach ($items as $key => $value) { echo «<li>$value</li>»; } echo «</ul>»; } ?>

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

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

echo $phones[«apple»][0];

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

echo $phones[«nokia»][1];

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

<?php $technics = array( «phones» => 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 «<h3>$tovar</h3>»; echo «<ul>»; foreach ($items as $key => $value) { echo «<li>$key : $value</li>»; } echo «</ul>»; } // присвоим одному из элементов другое значение $technics[«phones»][«nokia»] = «Nokia Lumnia 930»; // выведем это значение echo $technics[«phones»][«nokia»]; ?>

НазадСодержаниеВперед

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

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

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

Двумерный массив — массив, который в качестве значений хранит в себе другие массивы.

Создание массивов в PHP. Простой, многомерный, ассоциативный

Рассмотрим создание двумерного массива с помощью конструктора :

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

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

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

<?php $flowers = array( array(«розы», 100 , 15), array(«тюльпаны», 60 , 25), array(«орхидеи», 180 , 7) ); echo «<h1>Ручной доступ к элементам</h1>»; echo $flowers[0][0].» цена «.$flowers[0][1].» количество «.$flowers[0][2].»<br>»; echo $flowers[1][0].» цена «.$flowers[1][1].» количество «.$flowers[1][2].»<br>»; echo $flowers[2][0].» цена «.$flowers[2][1].» количество «.$flowers[2][2].»<br>»; echo «<h1>Использование циклов для вывода элементов</h1>»; echo «<ol>»; for ($row = 0; $row < 3; $row++) { echo «<li><b>Номер строки $row</b>»; echo «<ul>»; for ($col = 0; $col < 3; $col++) { echo «<li>».$flowers[$row][$col].»</li>»; } echo «</ul>»; echo «</li>»; } echo «</ol>»; ?>

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

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

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

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

<?php $flowers = array( array( «Название» => «розы», «Цена» => 100, «Количество» => 15 ), array( «Название» => «тюльпаны», «Цена» => 60, «Количество» => 25, ), array( «Название» => «орхидеи», «Цена» => 180, «Количество» => 7 ) ); echo «<h1>Ручной доступ к элементам ассоциативного массива</h1>»; for ($row = 0; $row < 3; $row++) { echo $flowers[$row][«Название»].» цена «.$flowers[$row][«Цена»] .» количество «.$flowers[$row][«Количество»]; echo «<br>»; } echo «<h1>Использование цикла foreach для доступа к элементам</h1>»; echo «<ol>»; for ($row = 0; $row < 3; $row++) { echo «<li><b>Номер строки $row</b>»; echo «<ul>»; foreach($flowers[$row] as $key => $value) { echo «<li>».$value.»</li>»; } echo «</ul>»; echo «</li>»; } echo «</ol>»; ?>

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

$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] ] ];

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

<?php $flowers = [ [ [«розы», 100 , 15], [«тюльпаны», 60 , 25], [«орхидеи», 180 , 7] ], [ [«розы», 100 , 15], [«тюльпаны», 60 , 25], [«орхидеи», 180 , 7], ], [ [«розы», 100 , 15], [«тюльпаны», 60 , 25], [«орхидеи», 180 , 7] ] ]; echo «<ul>»; for ( $layer = 0; $layer < 3; $layer++ ) { echo «<li>Номер слоя $layer»; echo «<ul>»; for ( $row = 0; $row < 3; $row++ ) { echo «<li>Номер строки $row»; echo «<ul>»; for ( $col = 0; $col < 3; $col++ ) { echo «<li>».$flowers[$layer][$row][$col].»</li>»; } echo «</ul>»; echo «</li>»; } echo «</ul>»; echo «</li>»; } echo «</ul>»; ?>

Массивы

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

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

Массивы инициализируются с помощью функции array().

Основы PHP — Массивы. Индексные, ассоциативные и многомерные массивы

В зависимости от способа задания параметров создается либо простой, либо ассоциативный массив.
$array1 = array(1,2,3,4,5); — cоздает простой массив из 5 элементов с индексацией, наччинающейся с 0. Размер массива можно узнать с помощью функции count($array1);
Количество элементов массива: 5,
а содержимое с помощью цикла for($i=0; $i<count($array1); $i++){echo $array1[$i].» «;};
1 2 3 4 5

Для инициализации ассоциативного массива используется другая форма записи:
$array2 = array(«FirstName»=>»Иван», «MiddleName»=>»Иванович», «LastName»=>»Иванов»)
Количество элементов массива: 3
Содержимое массива с помощью обычного цикла уже не просмотреть…. Для этого необходимо использовать специальную форму цикла — foreach($array2 as $key=>$c){echo $array2[$key].» «};
Иван Иванович Иванов

Функция $Name = array(); без параметров инициализирует пустой массив.
Количество элементов массива: 0
Теперь вид массива будет зависеть от первого задания элемента:$Name[0]=5;
Количество элементов массива: 1
Элемент $Name[0] = 5
и организуется линейный массив.
Для создания ассоциативных массивов такой возможности нет.

PHP позволяет создавать простые массивы без предварительной инициализации с помощью функции array();.
$array3[]=1;array3[]=2;array3[]=3;array3[]=4;array3[]=5;
Количество элементов массива: 5
$array3[0] = 1; $array3[1] = 2; $array3[2] = 3; $array3[3] = 4; $array3[4] = 5;
Если массив еще не определен, то индексация начинается с 0, иначе новый элемент добавляется в конец массива и индекс увеличивается на 1:
$array3[]=6;array3[]=7;array3[]=8;array3[]=9;array3[]=10;
Количество элементов массива: 10
$array3[0] = 1; $array3[1] = 2; $array3[2] = 3; $array3[3] = 4; $array3[4] = 5; $array3[5] = 6; $array3[6] = 7; $array3[7] = 8; $array3[8] = 9; $array3[9] = 10;

Мы можем сами определять индекс элемента в массиве и при этом использовать любые значения:
$array3[]=1;array3[3]=2;array3[5]=3;array3[7]=4;array3[11]=5;
Однако если мы теперь попытаемся получить элементы массива с помощью обычного цикла:
for($i=0; $i<count($array3); $i++){echo $array3[$i].» «;};
, то будем получать сообщения об ошибках при попадании на несуществующие элементы:
Количество элементов массива: 5
$array3[0] = 1;
$array3[1] = ;
$array3[2] = ;
$array3[3] = 2;
$array3[4] = ;

Для работы с такими массивами придется использовать циклы, как для ассоциативных массивов.
foreach($array3 as $key=>$c){echo ‘$array3[‘.$key.’] = ‘.$array3[$key].» «};
$array3[0] = 1 $array3[3] = 2 $array3[5] = 3 $array3[7] = 4 $array3[11] = 5

Чтобы быть уверенным, что данные добавляются в пустой массив, его необходимо предварительно очистить с помощью функции Unset($array3), после чего указанная переменная перестает существовать.

Количество элементов массива: 0
Теперь $array3[]=6;array3[]=7;array3[]=8;array3[]=9;array3[]=10;
Количество элементов массива: 5
6 7 8 9 10

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

Многомерный массив является массивом массивов. Каждый элемент содержит другой массив.

Создание ассоциативного массива из Foreach Loop PHP

array_diff

(PHP 4 >= 4.0.1, PHP 5)

array_diff — Вычислить расхождение в массивах

Описание

array array_diff ( array array1, array array2 [, array …] )

Функция array_diff() возвращает массив, состоящий из значений массива array1, которые отсутствуют в любом другом массиве, перечисленном в последующих аргументах. Обратите внимание, что ключи массивов сохраняются.

Пример 1. Пример использования array_diff()

В результате выполнения этой программы переменная $result будет содержать array («blue»);. Повторения одного и того же значения в $array1 обрабатываются как одно значение.

Замечание: Два элемента считаются одинаковыми если и только если (string) $elem1 === (string) $elem2. Другими словами, когда их строковое представление идентично.

Замечание: Обратите внимание, что эта функция обрабатывает только одно измерение n-размерного массива. Естественно, вы можете обрабатывать и более глубокие уровни вложенности, например, используя array_diff($array1[0], $array2[0]);.

Внимание

См.также array_intersect().

Смотрите также:
Все функции array
Описание на ru2.php.net
Описание на php.ru

FILED UNDER : IT

Submit a Comment

Must be required * marked fields.

:*
:*