Масиви в PHP
Найбільш часто серед усіх структур зберігання даних зустрічаються масиви, які є індексованими сукупностями змінних одного типу. Кожна змінна або елемент масиву має свій індекс та пронумеровані від 0 до N - 1, де N - розмір масиву. Імена масивів, як і змінних, починаються з символу $. Для звернення до окремих елементів масиву необхідно розмістити після його імені квадратні дужки [], в яких вказати індекс елемента масиву. Якщо елементом масиву виступає інший масив, то такий масив називають багатовимірним, а для звернення до кінцевих елементів використовують кілька пар квадратних дужок, де вказуються індекси відповідно двох масивів.

Створити масив можна за допомогою квадратних дужок. Наступний приклад еквівалентний попередньому:
Як видно з попередніх прикладів, елементам масиву автоматично призначені індекси, починаючи з нульового. Однак індекс початкового елемента, а також порядок слідування індексів можна змінювати. Для цього в конструкції array() або [] перед елементом вказується його індекс за допомогою оператора =>:
Призначати індекси можна як першому елементу, так і усім наступним елементам масиву. Усі непронумеровані елементи автоматично отримуватимуть значення, що дорівнює максимальному та збільшеному на одиницю.
Ще одним способом створення масиву є присвоєння неініціалізованим елементам масиву нових значень. Наступний приклад повністю еквівалентний попередньому:
Ще один спосіб створення масиву полягає у приведенні скалярної змінної (тобто змінної типу Integer, Float, String або Boolean) до типу Array. В результаті буде створено масив, що містить один елемент з індексом 0 і значенням, що дорівнює значенню змінної.
Також, крім конструкцій array() та [], допускається створення елементів асоціативного масиву за допомогою прямого звернення до них:
У круглих дужках конструкції list() кількість елементів може не збігатися з кількістю елементів вихідного масиву. При цьому, якщо елементів у масиві більше – зайві будуть відкинуті, якщо менше – частина змінних залишиться неініціалізованими. Крім того, частина перших елементів масиву може бути пропущена, для цього достатньо вказати відповідну кількість ком:
Цикл Foreach спеціально створений для асоціативних масивів і має наступний синтаксис:
Число вкладених циклів відповідає розмірності масиву:
Оператори еквівалентності === та нееквівалентності !== відповідно схожі з операторами рівності == та нерівності !=. Два масиви вважаються еквівалентними, якщо збігаються не тільки кількість їх елементів, ключі та значення, але є і збіг типів значень.
Для пошуку значень у масиві використовується функція In_array, яка здійснює пошук значення в масиві та повертає True, якщо значення знайдено, і False – інакше.
Знайти ключ масиву за значенням дозволяє функція Array_search, яка шукає значення масиву і, якщо значення знайдено, повертає відповідний ключ, інакше повертається False.
#самовчитель_php

Створення масиву
Для створення масивів є кілька способів. Найпростішим є використання конструкції Array, у круглих дужках якої через кому перераховуються елементи масиву. Конструкція array() як результат повертає масив.<?php
$arr = array('red', 'green', 'yellow');
echo $arr[0]; // red
echo $arr[1]; // green
echo $arr[2]; // yellow
echo $arr; // Notice: Array to string conversion (array)У цьому прикладі створюється масив $arr, що складається з трьох елементів, пронумерованих від 0 до 2. Кожен елемент масиву виводиться окремою конструкцією Echo. При спробі виводу всього масиву $arr у вікно браузера замість його вмісту буде виведений рядок «Array» із попередженням типу Notice. Для перегляду структури та вмісту масиву передбачено спеціальну функцію Print_r.Створити масив можна за допомогою квадратних дужок. Наступний приклад еквівалентний попередньому:
<?php
$arr = ['red', 'green', 'yellow'];Цей підхід повторює синтаксис масивів в інших сучасних мовах скриптів, таких як Python або Ruby. Однак, оскільки історично конструкція array() з’явилася в PHP першою, дуже часто в коді готових РНР-додатків можна зустріти саме її.Як видно з попередніх прикладів, елементам масиву автоматично призначені індекси, починаючи з нульового. Однак індекс початкового елемента, а також порядок слідування індексів можна змінювати. Для цього в конструкції array() або [] перед елементом вказується його індекс за допомогою оператора =>:
<?php
$arr = [5 => 'red', 'green', 'yellow'];В результаті першому елементу масиву $arr призначається індекс 5, наступні елементи автоматично отримують номери 6 та 7. Також слід зазначити, що елементи з індексами 0, 1, ... 4 та 8, ... просто не існують, звернення до них сприймається як звернення до неініціалізованої змінної зі значенням Null.Призначати індекси можна як першому елементу, так і усім наступним елементам масиву. Усі непронумеровані елементи автоматично отримуватимуть значення, що дорівнює максимальному та збільшеному на одиницю.
Ще одним способом створення масиву є присвоєння неініціалізованим елементам масиву нових значень. Наступний приклад повністю еквівалентний попередньому:
<?php
$arr[5] = 'red';
$arr[] = 'green';
$arr[] = 'yellow';Якщо значення індексу не вказується у квадратних дужках, призначення індексів до елементів відбувається автоматично.Ще один спосіб створення масиву полягає у приведенні скалярної змінної (тобто змінної типу Integer, Float, String або Boolean) до типу Array. В результаті буде створено масив, що містить один елемент з індексом 0 і значенням, що дорівнює значенню змінної.
<?php
$var = 'color red';
$arr = (array)$var;Індексні та асоціативні масиви
Якщо індексами масиву виступають числа, він називається індексним. Але якщо індексами є рядки, то такий масив називають асоціативним, а його індекси – ключами. Один масив може мати як числові індекси так і рядкові ключі, і називається змішаним.<?php
$arr = ['one' => 'red', 'two' => 'green'];Результат виконання прикладу буде масив:Array
(
[one] => red
[two] => green
)При зверненні до елементів асоціативного масиву замість індексів зазначаються відповідні ключі, які, як і звичайні рядки, залежать від регістру.Також, крім конструкцій array() та [], допускається створення елементів асоціативного масиву за допомогою прямого звернення до них:
<?php
$arr['one'] = 'red';
$arr['two'] = 'green';При спробі створення двох елементів масиву з однаковими ключами створюється один елемент з останнім значенням.Багатовимірні масиви
Якщо елементами масиву виступають інші масиви, тоді масив називається багатовимірним. Принцип створення багатовимірних масивів аналогічний до створення одномірних. Масиви можна створювати, звертаючись до елементів або використовуючи вкладені конструкції array() або [].<?php
$arr = [
'color' => ['red', 'green', 'yellow']
];Внаслідок такої ініціалізації буде створено масив наступної структури:Array
(
[color] => Array
(
[0] => red
[1] => green
[2] => yellow
)
)Отриманий масив є змішаним, тобто у ньому присутні як індекси, так і ключі асоціативного масиву.Інтерполяція елементів масиву в рядки
У рядках з подвійними лапками замість змінних підставляється їхнє значення. Так само поводяться елементи масиву:<?php
$arr[] = 'red';
echo "Color $arr[0]";Якщо йдеться про асоціативні масиви, то лапки, якими обрамляється ключ, вказувати не слід, інакше скрипт поверне помилку аналізу:Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting '-' or identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) Однак, у разі багатовимірних масивів інтерполювати елемент так, як це продемонстровано у попередньому прикладі, вже не вдасться. Для інтерполяції потрібно або укласти елемент у фігурні лапки {}, або використовувати конкатенацію рядків.<?php
$arr[] = 'red';
echo "Color {$arr['0']}";
echo "Color ".$arr[0];Як видно з прикладу, при використанні фігурних дужок до ключів елементів асоціативних масивів можна вказувати лапки.Конструкція List
За допомогою конструкції List можна здійснити обернену задачу конструкцій array() і [] - перетворити елементи масиву на звичайні змінні:<?php
$arr = [1, 2, 3];
list($one, $two, $three) = $arr;
echo $one; // 1
echo $two; // 2
echo $three; // 3Конструкція list() працює виключно з числовими масивами, нумерація індексів яких починається з нуля. При спробі перетворення елементів асоціативного масиву будуть виведені попередження типу: Notice: Undefined offset.У круглих дужках конструкції list() кількість елементів може не збігатися з кількістю елементів вихідного масиву. При цьому, якщо елементів у масиві більше – зайві будуть відкинуті, якщо менше – частина змінних залишиться неініціалізованими. Крім того, частина перших елементів масиву може бути пропущена, для цього достатньо вказати відповідну кількість ком:
<?php
$arr = [1, 2, 3];
list(,,$three) = $arr;
echo $one; // Notice: Undefined variable
echo $two; // Notice: Undefined variable
echo $three; // 3Конструкцію list() можна використовувати для обміну значень змінних без змінної-посередника:list($y, $x) = [$x, $y];Обхід масиву
Дуже часто необхідно здійснити обхід масиву в циклі. Для цього можна скористатися операторами For або While, для асоціативних масивів призначений спеціалізований оператор Foreach. Продемонструємо обхід індексного масиву за допомогою циклу For:<?php
$numbers = ['1', '2', '3'];
for ($i = 0; $i < count($numbers); $i++) {
echo $numbers[$i];
}Результатом роботи прикладу буде рядок: 123. За допомогою функції Count виконали підрахунок кількості елементів у масиві, яка приймає як параметр масив і повертає кількість елементів у ньому.Цикл Foreach спеціально створений для асоціативних масивів і має наступний синтаксис:
foreach ($array as [$key =>] $value) {
оператори;
}Цикл Foreach послідовно обходить всі елементи масиву $array, поміщаючи при кожній ітерації циклу ключ у змінну $key, а значення у змінну $value. Імена цих змінних можуть бути будь-якими.<?php
$arr = [
'first' => '1',
'second' => '2',
'third' => '3'
];
foreach ($arr as $index => $val) {
echo $index . ' = '. $val;
}Результатом роботи прикладу будуть наступні рядки:first = 1
second = 2
third = 3Змінну $index можна опустити, оскільки вона не є обов’язковою.Число вкладених циклів відповідає розмірності масиву:
<?php
$arr = [
'Color' => ['red', 'yellow', 'green'],
];
foreach ($arr as $name => $color) {
echo '<p>'.$name.'</p>';
foreach ($color as $value) {
echo '<p> -'.$value.'</p>';
}
}Результат виконання скрипту:Color
-red
-yellow
-greenЗлиття масивів
Для складання значення двох масивів можна використовувати оператор плюс (+).<?php
$fst = [1 => 'one'];
$snd = [2 => 'two'];
$sum = $fst + $snd;В результаті виконання прикладу буде виведено наступний масив $sum:Array
(
[1] => one
[2] => two
)При додаванні масивів з однаковими індексами, у результуючий масив потрапляють елементи з першого масиву:<?php
$fst = [1, 2];
$snd = [3, 4, 5];
$sum = $fst + $snd;В результаті виконання прикладу буде виведено наступний масив $sum:Array
(
[0] => 1
[1] => 2
[2] => 5
)Якщо необхідно, щоб в результуючий масив потрапили елементи обох масивів, замість оператора + використовують спеціальну функцію Array_merge, яка в якості параметрів приймає масиви, що зливаються.<?php
$fst = [1, 2];
$snd = [3, 4, 5];
$sum = array_merge($fst, $snd);В результаті виконання прикладу буде виведено наступний масив $sum:Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)Порівняння масивів
Порівнювати масиви можна з допомогою операторів рівності == і нерівності !=. Два масиви вважаються рівними, якщо кількість та значення їх ключів збігаються:<?php
$ar1 = [1, 2];
$ar2 = [1, 2];
$ar3 = [1, 2, 3];
if ($ar1 == $ar2) {
echo 'Масиви рівні';
} else {
echo 'Масиви не рівні';
}
if ($ar1 == $ar3) {
echo 'Масиви рівні';
} else {
echo 'Масиви не рівні';
}За першої умови буде виведено результат Масиви рівні, за другої - Масиви не рівні.Оператори еквівалентності === та нееквівалентності !== відповідно схожі з операторами рівності == та нерівності !=. Два масиви вважаються еквівалентними, якщо збігаються не тільки кількість їх елементів, ключі та значення, але є і збіг типів значень.
Перевірка існування елементів масиву
Перевірити, чи існує той чи інший елемент масиву, можна за допомогою конструкції Isset:<?php
$arr = [1, 2];
for ($i = 0; $i < 3; $i++) {
echo isset($arr[$i]) ? "Елемент \$arr[$i] існує" : "Елемент \$arr[$i] не існує";
}Як результат прикладу будуть наступні рядки:Елемент $arr[0] існує
Елемент $arr[1] існує
Елемент $arr[2] не існуєІснування масиву може бути перевірено за допомогою конструкції Isset. Якщо необхідно переконатися, чи поточна змінна належить до типу масиву, використовують функцію Is_array.Для пошуку значень у масиві використовується функція In_array, яка здійснює пошук значення в масиві та повертає True, якщо значення знайдено, і False – інакше.
<?php
$arr = [1, 2];
if (in_array(2, $arr)) {
echo "Елемент існує";
}Аналогічно функції In_array для пошуку заданого ключа масиві можна скористатися функцією Array_key_exists, яка повертає True, якщо ключ знайдений в масиві.Знайти ключ масиву за значенням дозволяє функція Array_search, яка шукає значення масиву і, якщо значення знайдено, повертає відповідний ключ, інакше повертається False.
#самовчитель_php
