admin / 26.01.2018
Содержание
Последнее обновление: 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»]; ?>
Подобные массивы еще называют ассоциативными.
Выше был рассмотрен один способ создания массива. Но есть и другой, который предусматривает применение оператора .
<?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»]; ?>
НазадСодержаниеВперед
Массив не обязательно должен представлять из себя простой список ключей и простых значений. Каждый элемент массива может содержать в качестве значения другой массив, который в свою очередь может тоже содержать массив и так далее. Таким образом можно создавать двумерные и трехмерные массивы.
Двумерный массив — массив, который в качестве значений хранит в себе другие массивы.
Рассмотрим создание двумерного массива с помощью конструктора :
$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().
В зависимости от способа задания параметров создается либо простой, либо ассоциативный массив.
$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
Многомерный массив является массивом массивов. Каждый элемент содержит другой массив.
(PHP 4 >= 4.0.1, PHP 5)
array_diff — Вычислить расхождение в массивах
array array_diff ( array array1, array array2 [, array …] )
Функция array_diff() возвращает массив, состоящий из значений массива array1, которые отсутствуют в любом другом массиве, перечисленном в последующих аргументах. Обратите внимание, что ключи массивов сохраняются.
В результате выполнения этой программы переменная $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