ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 20.05.2024
Просмотров: 15
Скачиваний: 0
Практична робота №9
Тема: Двовимірні Масиви.
Мета: ознайомитися з правилами і особливостями обробки дво- і багатовимірних впорядкованих послідовностей даних. Отримати практичні навички використання стандартних функцій опрацювання масивів і створити відповідні скрипти.
Теоретичний розділ
В цій роботі розберемо, що таке двовимірний масив і як він виглядає.
Ініціалізація двовимірного масиву
Сказати простою мовою двовимірний масив це масив, елементами якого виступають інші масиви з даними (масив в масиві). До речі сказати вкладеність масивів може бути не тільки двовимірною, але на практиці таке зустрічається вкрай рідко. Причина тому, витрати на обробку. Починаючи роботу з масивом на сторінці, скрипт завантажує весь вміст масиву в оперативну пам'ять, тим самим процес роботи з таким масивом стає занадто ресурсоємним, що не є виправданим. У таких випадках застосовується база даних, за рахунок чого відбувається збільшення швидкодії.
Двовимірний масив це по суті матриця, тобто таблиця з даними. Тепер подивимося як це виглядає візуально, як створити двовимірний масив.
Лістинг № 1 - Приклад створення двовимірного масиву.
<?php
// масив Машини
$m = array('Honda', 'Hummer', 'BMW', 'Toyota');
// масив Літаки
$s = array('AH', 'TU-144', 'Boing', 'СУ');
// масив Танки
$t = array('Тигр', 'Пантера', 'Т-34', 'Аль Халід');
// масив Кораблі
$k = array('Кузнєцов', 'Ямато', 'Ясень', 'Петропавловск');
// двувимірний масив Техніка
$THN = array($m, $s, $t, $k);
?>
Приклад з лістингу № 1, досить наочно показує як формується двовимірний масив. Спочатку створюється одновимірний масив, який в свою чергу, вкладається в масив "Техніка" $ TH. таким чином вже масив $ TH має в якості значень своїх ключів масиви. У цьому прикладі було створено не асоціативний масив, просто для наочності. Хоча для повної ясності вмісту при обході масиву, слід створити асоціативний масив. Це такий масив в якому ключ це не числове значення, що задається за замовчуванням кожному елементу, а осмислена назва. Простіше сказати іменуємо масив, згідно його вмісту.
Лістинг № 2 - Асоціативний двовимірний масив.
<?php
// масив Машини
$m = array('Honda', 'Hummer', 'BMW', 'Toyota');
// масив Літаки
$s = array('AH', 'TU-144', 'Boing', 'СУ');
// масив Танки
$t = array('Тигр', 'Пантера', 'Т-34', 'Аль Халід');
// масив Кораблі
$k = array('Кузнецов','Ямато','Ясень','Петропавловск');
// двумірний масив Техніка
$TH = array('Машини'=>$m, 'Літаки'=>$s, 'Танки'=>$t, 'Кораблі'=>$k);
?>
Тепер двовимірний масив $ TH має не просто числовий ключ для кожного вхідного в нього масиву, а ім'я по якому можна визначити зміст вкладеного масиву.
Обхід двовимірного масиву.
Обхід двовимірного масиву - є не що інше, як послідовний перебір елементів масиву. А в лістингу нижче представлений код який ще й виводить на монітор вміст.
Лістинг № 3 - Обхід двовимірного масиву
<?php
// обхід двумірного масиву
for($i=0; $i < count($THN); $i++)
{
for($q=0; $q < count($THN[$i]); $q++)
{
echo " » ".$THN[$i][$q];
}
echo "<br>";
}
?>
На моніторі побачимо наступне:
»Honda» Hummer »BMW» Toyota
»AH» Ту-144 »Boing» СУ
»Тигр» Пантера »Т-34» Аль Халід
»Кузнєцов» Ямато »Ясень» Петропавловськ
Це приклад обходу, при якому двовимірний масив є не асоціативним, тобто ключами двовимірного масиву виступають числа. Щоб вивести на монітор вміст асоціативного масиву, розглянемо приклад в лістингу нижче.
Лістинг № 4 - Обхід двовимірного асоціативного масиву.
<?php
// Підрахунок кількості елементів в масиві
$sum = count($TH);
// Асоціативний масив слід обходити, за допомогою конструкції foreach
foreach($TH as $key => $vol)
{
// виводимо назву масива
echo $key." -- ";
// обхід
for($q=0; $q <= $sum; $q++)
{
echo " || ".$TH[$key][$q];
}
echo "<br>";
}
?>
На мониторе увидим следующее:
Машини -- || Honda || Hummer || BMW || Toyota ||
Літаки -- || AH || TU-144 || Boing || СУ ||
Танки -- || Тигр || Пантера || Т-34 || Аль Халід ||
Кораблі -- || Кузнєцов || Ямато || Ясень || Петропавловск ||
Нижче наведено приклад впорядкованого виведення асоціативного масиву.
Лістинг № 5 - Обхід двумірного масиву і виведення в таблиці.
<?php
// масив Машини
$m = array('Honda', 'Hummer', 'BMW', 'Toyota');
// масив Літаки
$s = array('AH', 'TU-144', 'Boing', 'СУ');
// масив Танки
$t = array('Тигр', 'Пантера', 'Т-34', 'Аль Халід');
// масив Кораблі
$k = array('Кузнєцов','Ямато','Ясень','Петропавловск');
// двумірний масив Техніка
$TH = array('Машини'=>$m, 'Літаки'=>$s, 'Танки'=>$t, 'Кораблі'=>$k);
// Підрахунок кількості елементів в масиві
$sum = count($TH);
echo "<table>";
foreach($TH as $key => $vol)
{
// вивід назви масиву
echo "<th>".$key."</th>";
// обхід
for($q=0; $q <= $sum; $q++)
{
echo "<tr><td> ".$TH[$key][$q]."<td></tr>";
}
}
echo "</table>";
?>
На моніторі бачимо наступне:
Машини
Honda
Hummer
BMW
Toyota
Літаки
AH
TU-144
Boing
СУ
Танки
Тигр
Пантера
Т-34
Аль Халід
Корабли
Кузнєцов
Ямато
Ясень
Петропавловск
З вищесказаного, можна зробити висновок, що по суті при виведенні на монітор після обходу двовимірного масиву, вкладений масив виступає як рядок таблиці з даними, що й формує в свою чергу матрицю. Якщо спочатку скласти правильно вкладені масиви, то на виході зможемо отримати таблицю з даними наприклад анкетними, кожного працівника. Розглянемо ще один приклад, матрицю.
Лістинг № 6 - Обхід двовимірного масиву, матриця.
<?php
// масиви з даними на робітників підприємства
$m = array('Олександр','Новіков','35','вул. Новоясеневський проспект д. 7','125-89-63');
$s = array('Олексій','Бодров','28','вул. Астраханська д. 45','256-89-63');
$t = array('Микола','Хмельницький','28','ул. Боровицька д. 25','100-89-63');
$k = array('Олег','Нєстєров','44','вул. Каховка д. 11','330-80-63');
$z = array('Олег','Нєстєров','44','вул. Каховка д. 11','330-80-63');
$x = array('Олег','Нєстєров','44','вул. Каховка д. 11','330-80-63');
// двумірний масив з даними про співробітників
$TH = array($m, $s, $t, $k, $z, $x);
// підрахунок кількості елементів в масиві
$sum = count($TH);
echo "<table border='1' cellpadding='5'>
<tr>
<th>Имя</th><th>Фамилия</th><th>Возраст</th><th>Адрес</th><th>Телефон</th>
</tr>";
for($i=0; $i <= $sum; $i++)
{
echo "<tr>";
$sum = count($TH[$i]);
for($q=0; $q < $sum; $q++)
{
echo "<td> ".$TH[$i][$q]."</td>";
}
echo "</tr>";
}
echo "</table>";
?>
На моніторі бачимо наступне:
Імя |
Прізвище |
Вік |
Адреса |
Телефон |
Олександр |
Новіков |
35 |
вул. Новоясеневський проспект д. 7 |
125-89-63 |
Олексій |
Бодров |
28 |
вул. Астраханська д. 45 |
256-89-63 |
Микола |
Хмельницький |
28 |
вул. Боровицька д. 25 |
100-89-63 |
Олег |
Нестеров |
44 |
вул. Каховка д. 11 |
330-80-63 |
Контрольні питання
-
Дайте визначення масиву даних.
-
Чим, на вашу думку, одновимірні масиви різняться від багатовимірних? Наведіть приклад.
-
Якою може бути ступінь вкладеності масивів в РНР? Чим вона обмежується?
-
Яким чином можна замінити велику ступінь вкладеності?
-
Що таке асоціативний масив даних?
-
Що таке неасоціативний масив даних?
-
Порівняйте два описаних вище типи масивів. Де і коли доцільніше використовувати кожен з них?