1. Головна
  2. Колонка автора
  3. Масиви в PHP

Масиви в PHP

Найбільш часто серед усіх структур зберігання даних зустрічаються масиви, які є індексованими сукупностями змінних одного типу. Кожна змінна або елемент масиву має свій індекс та пронумеровані від 0 до N - 1, де N - розмір масиву. Імена масивів, як і змінних, починаються з символу $. Для звернення до окремих елементів масиву необхідно розмістити після його імені квадратні дужки [], в яких вказати індекс елемента масиву. Якщо елементом масиву виступає інший масив, то такий масив називають багатовимірним, а для звернення до кінцевих елементів використовують кілька пар квадратних дужок, де вказуються індекси відповідно двох масивів.
Масиви в 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
Редакція «КовельPost» може не поділяти думку блогерів або дописувачів. За зміст публікацій і їх достовірність відповідальність несуть автори.

Коментарі

Читайте також

Цикли в PHP

Цикли в PHP
Для програмування повторюваних процесів використовуються цикли, які є практично у всіх сучасних мовах програмування.

Оператори в PHP

Оператори в PHP
Розглянемо рядкові, арифметичні та оператори порівняння, пріоритет виконання операторів та об’єднання рядків.

Підписуйтесь на наш канал у Telegram! 🚀

@kovelpost