PHP

Массивы

Определение массива Рано или поздно каждому программисту приходится сталкиваться с таким понятием как массив. Массивом можно считать разновидность переменных, в котором храниться несколько значений. Массив определяется при помощи конструкции array(), в круглых скобках которой указываются его значения:
<?php 
 $arr = array('PHP', 'MySQL', 'Apache'); 
?>

или
<?php 
 $arr[] = "PHP"; 
 $arr[] = "MySQL"; 
 $arr[] = "Apache"; 
?>

В C-подобных языках программирования, индекс массива традиционно начинается с 0. Это означает, что если мы захотим вывести первое значение массива "PHP", нам потребуется обратиться к нулевому индексу:
<?php 
 echo $arr[0]; // PHP 
?>

Если требуется начать массив с другого индекса, например, с 1, то необходимо явно это указать в конструкции array():
<?php 
 $arr = array(1 => "PHP", 
 2 => "MySQL", 
 3 => "Apache"); 
?>

или
<?php 
 $arr[1] = "PHP"; 
 $arr[2] = "MySQL"; 
 $arr[3] = "Apache"; 
?>

Элементы массива можно использовать в двойных кавычках как обычные переменные, так код:
<?php 
 echo "$arr[1] $arr[2] $arr[3]"; 
?>

или через цикл:
<?php 
 for ($i = 1; $i <= 3; $i++) 
 { 
 echo $arr[$i]." "; 
 } 
?>

Следует заметить, что число элементов в массиве не обязательно знать заранее — его можно вычислить при помощи функции count():
<?php 
 for ($i = 1; $i <= count($arr); $i++) 
 { 
 echo $arr[$i]." "; 
 } 
?>

Выведет строку "PHP MySQL Apache". В качестве индексов массива могут выступать не только числа, но и строки:
<?php 
 $arr = array("first" => "PHP", 
 "second" => "MySQL", 
 "third" => "Apache"); 
?>

или
<?php 
 $arr["first"] = "PHP"; 
 $arr["second"] = "MySQL"; 
 $arr["third"] = "Apache"; 
?>

В этом случае массив называется ассоциативным, а его индексы называются ключами. Для вывода элемента массива в строке кавычки (ни двойные, ни одинарные) указывать не следует:
<?php 
 echo "$arr[first] $arr[second] $arr[third]"; 
?> 

Так как у ассоциативных массивов нет индексов, для обхода их введён специальный вид цикла — foreach:
<?php 
 foreach($arr as $key => $value) 
 { 
 echo "$key = $value <br />"; 
 } 
?>

В результате работы цикла будет выведено три строки
first = PHP 
second = MySQL 
third = Apache

Конструкция "$key =>", позволяющая получить доступ к ключу массива на каждом из циклов является не обязательно и может быть опущена:
<?php 
 foreach($arr as $value) 
 { 
 echo "$value <br />"; 
 } 
?>

Ряд функций, также позволяют возвращать массивы, например, функция file(), которая читает файл и возвращает его содержимое в виде массива. Каждый элемент массива соответствует одной строке.
<?php 
 $arr = file("text.txt"); 
 for($i = 0; $i < count($arr); $i++) 
 { 
 echo $arr[$i]."<br />"; 
 } 
?>

Другой полезной функцией является функция explode(), которая позволяет разбить строку на несколько фрагментов, каждый из которых помещается в отдельный элемент массива:
<?php 
 $str = "345|mail@mail.ru|http://www.softtime.ru|login|password"; 
 $arr = explode("|",$str); 
 for($i = 0; $i < count($arr); $i++) 
 { 
 echo $arr[$i]."<br />"; 
 } 
?>

Результат работы скрипта может выглядеть следующим образом:
345 
mail@mail.ru 
http://www.softtime.ru 
login 
password

Существует и обратная функция — implode(), которая объединяет, элементы массива в строку, используя для этого заданный разделитель:
<?php 
 $arr[] = "345"; 
 $arr[] = "mail@mail.ru"; 
 $arr[] = "http://www.softtime.ru"; 
 $arr[] = "login"; 
 $arr[] = "password"; 
 $str = implode("##",$arr); 
 echo $str; //345##mail@mail.ru##http://www.softtime.ru##login##password 
?>

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

Удалить отдельный элемент массива можно при помощи функции unset(), а проверить существование массива можно при помощи функции isset(). Определим массив из 10 элементов и уничтожим каждый чётный элемент.
<?php 
 $arr = array(9, 8, 7, 6, 5, 4, 3, 2, 1, 0); 
 unset($arr[0], $arr[2], $arr[4], $arr[6], $arr[8]); 
 // Проверяем существуют ли элементы массива 
 for($i = 0; $i < 10; $i++) 
 { 
 if(isset($arr[$i])) echo "Элемент $arr[$i] определён <br />"; 
 else echo "Элемент $arr[$i] не определён <br />"; 
 } 
?>

Результатом работы скрипта из будут следующие строки:
Элемент $arr[0] не определён 
Элемент $arr[1] определён 
Элемент $arr[2] не определён 
Элемент $arr[3] определён 
Элемент $arr[4] не определён 
Элемент $arr[5] определён 
Элемент $arr[6] не определён 
Элемент $arr[7] определён 
Элемент $arr[8] не определён 
Элемент $arr[9] определён

При помощи функции unset() можно уничтожить весть массив сразу.
<?php 
 $arr = array(9, 8, 7, 6, 5, 4, 3, 2, 1, 0); 
 unset($arr); 
 if(isset($arr)) echo "Массив определён"; 
 else echo "Массив не определён"; 
?>

До этого массивы выводились при помощи цикла, однако в PHP предусмотрена специальная функция для вывода дампа массива print_r(). Функция ориентирована на вывод в консольный поток, поэтому при выводе результатов в окно браузера лучше обрамить её тэгами < pre> и < /pre>:
<?php
 $arr[] = "345";
 $arr[] = "mail@mail.ru";
 $arr[] = "http://www.softtime.ru";
 $arr[] = "login";
 $arr[] = "password";
 
 print_r($arr);

?>

Результат работы скрипта выглядит следующим образом:
Array 
( 
 [0] => 345 
 [1] => mail@mail.ru 
 [2] => http://www.softtime.ru 
 [3] => login 
 [4] => password 
)

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

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

Пусть необходимо получить такую таблицу:
Имя Профессия Зарплата
Вася Слесарь 2500
Миша Строитель 3000
Андрей Шофер 2700

Для этого создадим двумерный массив:
<?php 
 $arr = array( array(‘Вася’, ‘слесарь’, 2500 ), 
 array(‘Миша’,’строитель’, 3000), 
 array(‘Андрей’, ‘шофер’, 2700)); 
?>

Теперь таблицу можно вывести при помощи следующего кода:
<?php 
 for ($i = 0; $i < 3; $i++) 
 { 
 for ($j=0; $j <3; $j++) 
 { 
 echo ' | '.$arr[$i][$j]; 
 } 
 echo '<br />'; 
 } 
?>

Результат показан выше.

| Вася | слесарь | 2500
| Миша | строитель | 3000
| Андрей | шофер | 2700

Также можно использовать трехмерные, четырехмерные и т.п. массивы.
Операции над массивами (сборник рецептов)

1) Определения числа элементов в массиве count():

Создадим массив $name:
 <?php 
 $name = array('Boss', 'Lentin', 'NAV', 'Endless', 'Dragons', 'SiLeNT', 'Doctor', 'Lynx'); 
?> 

Чтобы определить число элементов в массиве можно поступить следующим образом:
<?php 
 echo ‘Число элементов в массиве - ’.count($name); 
?>

Результат:

Число элементов в массиве – 8

2) Объединение массивов

a) Создадим два ассоциативных массива $a и $b:
 <?php 
 $a = array(“a” => ”aa”, “b” => “bb”); 
 $b = array(“c” => ”cc”, “d” => “dd”); 
?> 

Пусть необходимо создать массив $c, которые будет содержать как элементы массива $a так и массива $b:
 <?php 
 $a = array("a"=>"aa", "x"=>"xx"); 
 $b = array("c"=>"cc", "d"=>"dd"); 
 $c = $a + $b; 
 echo "<pre>"; 
 print_r($c); 
 echo "</pre>"; 
?> 

Результат:
 Array 
( 
 [a] => aa 
 [x] => xx 
 [c] => cc 
 [d] => dd 
) 

b) Создадим два числовых массива $a и $b:
 <?php 
 $a = array(10,20); 
 $b = array(100,200,300,400,500); 
?> 

Их уже не получится объединить при помощи конструкции $c = $a + $b;. Для их объединения потребуется воспользоваться функцией array_merge():
 <?php 
 $c = array_merge($a,$b); 
?> 

3) Сортировка массива

Воспользуемся массивом $name:
 <?php 
 $name = array('Boss', 'Lentin', 'NAV', 'Endless', 'Dragons', 'SiLeNT', 'Doctor', 'Lynx'); 
?> 

Пусть требуется отсортировать массив в алфавитном порядке, для этого можно воспользоваться следующим кодом:
 <?php 
 sort($name); 
 echo "<pre>"; 
 print_r($name); 
 echo "</pre>"; 
?> 

Результат:
 Array 
( 
 [0] => Boss 
 [1] => Doctor 
 [2] => Dragons 
 [3] => Endless 
 [4] => Lentin 
 [5] => Lynx 
 [6] => NAV 
 [7] => SiLeNT 
) 

Пусть необходимо из массива $name выбрать самый короткий элемент(у которого наименьшее количество символов), в этом случае можно воспользоваться кодом:
 <?php 
 $name = array('Boss', 'Lentin', 'NAV', 'Endless', 'Dragons', 'SiLeNT', 'Doctor', 'Lynx'); 
 $min = strlen($name[0]); 
 $nam = $name[0]; 
 for ($i=1; $i < count($name); $i++) 
 { 
 $len = strlen($name[$i]); 
 if ($len < $min) 
 { 
 $nam = $name[$i]; 
 $min = strlen($nam); 
 } 
 } 
 echo 'Наименьшая длина - '.$nam; 
?> 

4) Перемещение внутри массива

Создадим массив $num:
 <?php 
 $num = array(1,2,3,4,5,6,7,8,9,10); 
?> 

Пусть требуется отобразить элементы массива в обратном порядке, в этом случае можно воспользоваться кодом:
 <?php 
 $end = end($num); 
 While ($end) 
 { 
 echo $end.' - '; 
 $end = prev($num); 
 } 
?> 

Результат:

10 - 9 - 8 - 7 - 6 - 5 - 4 - 3 - 2 – 1

Приведённый выше код можно модифицировать:
 <?php 
 $num = range(1,10); 
 print_r (array_reverse($num)); 
?> 

Функция range(1,10) создает массив (1,2,3,4,5,6,7,8,9,10) со случайным расположением элементов. Функция array_reverse() принимает массив и располагает элементы в обратном порядке (10,9,8,7,6,5,4,3,2,1)

Функции next(), each() перемещают указатель на один элемент вперед. Функция reset() возвращает указатель на 1 элемент в массиве. Воспользуемся массивом $num:
 <?php 
 $num = array(1,2,3,4,5,6,7,8,9,10); 
?> 

Пусть необходимо вывести все элементы по порядку, и на последнем элементе массива вернуть указатель на первый элемент массива. Эту операцию можно осуществить при помощи следующего кода:
 <?php 
 $i=0; //Индекс 1 элемента 
 while ($i < count($num)) 
 { 
 echo $num[$i].' '; 
 $i++; 
 //Проверка если $i равен числу элементов в массиве 
 //тогда выводим последний элемент и возвращаем указатель 
 if ($num[$i] == count($num)) 
 { 
 echo $num[$i]; 
 reset ($num); 
 echo '<br />'."Конец массива"; 
 exit(); 
 } 
 } 
?> 

Результат:

1 2 3 4 5 6 7 8 9 10
Конец массива

5) Перемешивание элементов в массиве shuffle()

Функция shuffle() перемешивает значения в массиве, и если массив ассоциативный то возвращает его как список:
 <?php 
 $a = array(43,'PHP',4,57,'Boss',90); 
 shuffle($a); 
 foreach ($a as $n) echo "$n "; 
?>



6) Случайный элемент массива

Если имеется готовый массив, из которого необходимо вывести один случайный элемент, для этого необязательно перемешивать весь массив при помощи функции shuffle(), достаточно сгенерировать случайный индекс массива:
 <?php 
 // Определяем массив 
 $arr = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); 
 // Генерируем случайный индекс массива 
 $index = rand(0,count($arr) - 1); 
 // Выводим случайный элемент массива 
 echo $arr[$index]; 
?> 

7) Получение части массива array_slice()

Создадим массив $a
 <?php 
 $a = array(‘a’,’b’,’3’,’5’,’f’); 
?> 

Получить часть массива можно при помощи следующего кода:
 <?php 
 $b = array_slice($a, 2) // вывод 3, 5, f 
 $b = array_slice($a,0,3) // a, b, 3 
?> 

8) Сериализация массива

Функции serialize() и unserialize() позволяют осуществлять упаковку и распаковку, соответственно, массивов и объектов.

Примечание: Сериализация впервые появилась в объектно-ориентированных библиотеках, (первой из которых была MFC), потом сериализация стала появляться в объектно-ориентированных языках (Java). Идея сериализации заключается в том, что объекты и массивы очень сложны по своей структуре и на сохранения их путём перебора каждого элемента требуется значительный объём кода — самым простым решением является сохранение таких структур в виде единой закодированной последовательности — байт-коде. В PHP функции сериализации упаковывают данные не виде байт-кода, а виде строки.
 <?php 
 $poll[0] = 23; 
 $poll[1] = 45; 
 $poll[2] = 34; 
 $poll[3] = 2; 
 $poll[4] = 12; 
 // Упаковываем массив в строку 
 $str = serialize($poll); 
 echo $str."<br />"; 
 // Извлекаем массив из строки 
 $arr = unserialize($str); 
 print_r($arr); 
?> 

Результат:
 <?php 
 $poll[0] = 23; 
 $poll[1] = 45; 
 $poll[2] = 34; 
 $poll[3] = 2; 
 $poll[4] = 12; 
 // Упаковываем массив в строку 
 $str = serialize($poll); 
 echo $str."<br />"; 
 // Извлекаем массив из строки 
 $arr = unserialize($str); 
 print_r($arr); 
?> 
Добавлено: 20 Августа 2013 01:59:04 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...