Файл: Лабораторна робота 12.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 22.05.2024

Просмотров: 45

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Лабораторна робота №16

Тема: Масиви.

Мета: ознайомитися з правилами і особливостями обробки впорядкованих послідовностей даних. Отримати практичні навички використання стандартних функцій опрацювання масивів і створити відповідні скрипти.

Теоретичний розділ

Масив в PHP - це впорядковане відображення, яке встановлює відповідність між значенням і ключем. Цей тип оптимізований в декількох напрямках, тому його можна використовувати як власне масив, список (вектор), хеш-таблицю (що є реалізацією карти), словник, колекцію, стек, чергу і, можливо, щось ще. Так як значенням масиву може бути інший масив PHP, можна також створювати дерева і багатовимірні масиви.

Синтаксис

Визначення за допомогою array ( )

Масив (тип array) може бути створений мовною конструкцією array ( ). Як параметри вона приймає будь-яку кількість розділених комами пар key => value (ключ => значення).

array (

key => value,

key2 => value2,

key3 => value3,

...

)

Кома після останнього елемента масиву необов'язкова і може бути опущена. Зазвичай це робиться для однорядкових масивів, тобто array (1, 2) краще array (1, 2,). Для багаторядкових масивів з іншого боку зазвичай використовується завершальна кома, так як дозволяє легше додавати нові елементи в кінець масиву.

Приклад # 1 Простий масив

<? php

$ array = array (

" foo " => " bar ",

" bar " => " foo ",

) ;

? >

key може бути або типу integer, або типу string. value може бути будь-якого типу.

Додатково з ключем key будуть зроблені такі перетворення:

  • Рядки, що містять ціле число будуть перетворені до типу integer. Наприклад, ключ зі значенням " 8 " буде в дійсності збережений зі значенням 8. З іншого боку, значення " 08" не буде перетворений, так як воно не є коректним десятковим цілим.

  • Числа з плаваючою точкою (тип float) також будуть перетворені до типу integer, тобто дрібна частина буде відкинута. Наприклад, ключ із значенням 8.7 буде насправді збережений зі значенням 8.

  • Тип bool також перетворюються до типу integer. Наприклад, ключ із значенням true буде збережений зі значенням 1 і ключ із значенням false буде збережений зі значенням 0.

  • Тип null буде перетворений до порожньої рядку. Наприклад, ключ із значенням null буде насправді збережений зі значенням "".


Масиви (тип array) та об'єкти (тип object) не можуть використовуватися в якості ключів. При подібному використанні буде генеруватися попередження: Неприпустимий тип зсуву (Illegal offset type).

Якщо кілька елементів в оголошенні масиву використовують однаковий ключ, то тільки останній буде використовуватися, а всі інші будуть перезаписані.

Приклад # 2 Приклад перетворення типів і перезапису елементів

<? php

$ array = array (

1 => " a ",

" 1 " => " b ",

1.5 => " c ",

true => " d ",

) ;

var_dump ($ array) ;

? >

Так як всі ключі в наведеному вище прикладі перетворяться до 1, значення буде перезаписано на кожен новий елемент і залишиться тільки останнє присвоєне значення " d ". Для перевірки твердження, приклад слід набрати і запустити на виконання.

Масиви в PHP можуть містити ключі типів integer і string одночасно, так як PHP не робить різниці між індексованими і асоціативними масивами.

Приклад # 3 Змішані ключі типів integer і string

<? php

$ array = array (

" foo " => " bar ",

" bar " => " foo ",

100 => -100,

-100 => 100,

) ;

var_dump ($ array) ;

? >

Параметр key є необов'язковим. Якщо він не вказаний, PHP буде використовувати попереднє найбільше значення ключа типу integer, збільшене на 1.

Приклад # 4 Індексовані масиви без ключа

<? php

$ array = array (" foo ", " bar ", " hallo ", " world ") ;

var_dump ($ array) ;

? >

Можливо вказати ключ тільки для деяких елементів і пропустити для інших :

Приклад # 5 Ключі для деяких елементів

<? php

$ array = array (

" a ",

" b ",

6 => " c ",

" d ",

) ;

var_dump ($ array) ;

? >

При виконанні можна побачити, що останнє значення " d " було присвоєно ключу 7. Це сталося тому, що найбільше значення ключа цілого типу перед цим було 6.

Доступ до елементів масиву за допомогою квадратних дужок

Доступ до елементів масиву може бути здійснений за допомогою синтаксису array [ key ].


Приклад # 6 Доступ до елементів масиву

<? php

$ array = array (

" foo " => " bar ",

42 => 24,

" multi " => array (

" dimensional " => array (

" array " => " foo "

)

)

) ;

var_dump ($ array [" foo "]) ;

var_dump ($ array [ 42 ]) ;

var_dump ($ array [" multi "] [" dimensional "] [" array "]) ;

? >

Зауваження:

Для доступу до елементів масиву можуть використовуватися як квадратні, так і фігурні дужки (наприклад, $ array [ 42 ] і $ array { 42 } означають одне і те ж у вищенаведеному прикладі).

Створення / модифікація за допомогою синтаксису квадратних дужок

Існуючий масив може бути змінений явною установкою значень в ньому.

Це виконується присвоєнням значень масиву array із зазначенням у дужках ключа. Крім того, ви можете опустити ключ. У цьому випадку додайте до імені змінної порожню пару дужок ([ ]).

$ arr [ key ] = value ;

$ arr [] = value ;

// Key може бути integer або string

// Value може бути будь-яким значенням будь-якого типу

Якщо масив $ arr ще не існує, він буде створений. Таким чином, це ще один спосіб визначити масив array. Однак такий спосіб застосовувати не рекомендується, тому що якщо змінна $ arr вже містить деяке значення (наприклад, значення типу string із змінної запиту), то це значення залишиться на місці і [ ] може насправді означати доступ до символу в рядку. Краще ініціалізувати змінну шляхом явного привласнення значення.

Для зміни певного значення просто надайте нове значення елементу, використовуючи його ключ. Якщо ви хочете видалити пару ключ / значення, вам необхідно використовувати функцію unset ( ).

<? php

$ arr = array (5 => 1, 12 => 2) ;

$ arr [] = 56 ; // У цьому місці скрипта це

// Те ж саме, що і $ arr [ 13 ] = 56 ;

$ arr [" x "] = 42 ; // Це додає до масиву новий

// Елемент з ключем " x "

unset ($ arr [ 5 ]) ; // Це видаляє елемент з масиву

unset ($ arr) ; // Це видаляє масив повністю

? >

Зауваження:

Як вже говорилося вище, якщо ключ не вказано, то буде взятий максимальний з існуючих цілочисельних (integer) індексів, і новим ключем буде це максимальне значення (в крайньому випадку 0) плюс 1. Якщо цілочисельних індексів ще немає, то ключем буде 0 (нуль).

Врахуйте, що максимальне ціле значення ключа не обов'язково існує в масиві в даний момент. Воно могло просто існувати в масиві якийсь час, з тих пір як він був переіндексувати востаннє. Наступний приклад це ілюструє :


<? php

// Створюємо простий масив.

$ array = array (1, 2, 3, 4, 5) ;

print_r ($ array) ;

// Тепер видаляємо кожен елемент, але сам масив залишаємо недоторканим :

foreach ($ array as $ i => $ value) {

unset ($ array [$ i ]) ;

}

print_r ($ array) ;

// Додаємо елемент (зверніть увагу, що новим ключем буде 5, замість 0).

$ array [] = 6 ;

print_r ($ array) ;

// Переіндексація :

$ array = array_values ($ array) ;

$ array [] = 7 ;

print_r ($ array) ;

? >

Корисні функції

Для роботи з масивами існує достатня кількість корисних функцій. Дивіться розділ функції для роботи з масивами.

Зауваження:

Функція unset ( ) дозволяє видаляти ключі масиву. Зверніть увагу, що масив НЕ буде переіндексувати. Якщо ви дійсно хочете поведінки в стилі " видалити і зрушити ", можна переіндексувати масив використовуючи array_values ​​( ).

<? php

$ a = array (1 = >‘один’, 2 = >‘два’, 3 = >‘три’);

unset ($ a [ 2]);

/* Дасть масив, представлений так :

$ a = array (1 = >‘один’, 3 = >‘три’);

а НЕ так :

$ a = array (1 = >‘один’, 2 = >‘три’);

*/

$ b = array_values ​​($ a) ;

// Тепер $ b це array (0 = >‘один’, 1 = >‘три’)

? >

Керуюча конструкція foreach існує спеціально для масивів. Вона надає можливість легко пройтися по масиву.

Що можна і не можна робити з масивами

Чому $ foo [ bar ] невірно ?

Завжди укладайте в лапки строковий літерал в індексі асоціативного масиву. Наприклад, пишіть $ foo [‘bar’], а не $ foo [ bar ]. Але чому ? Часто в старих скриптах можна зустріти наступний синтаксис:

<? php

$ foo [ bar ] =‘ворог’;

echo $ foo [ bar ] ;

// І т.д.

? >

Це невірно, хоча й працює. Причина в тому, що цей код містить невизначену константу (bar), а не рядок (‘bar’- зверніть увагу на лапки), і PHP в майбутньому може визначити константу, яка, до нещастя для вашого коду, буде мати те ж саме ім'я. Це працює, тому що PHP автоматично перетворює "голу рядок » (не укладену в лапки рядок, яка не відповідає жодному з відомих символів мови) в рядок, зі значенням цієї " голою рядка". Наприклад, якщо константа з ім'ям bar не визначена, то PHP замінить bar на рядок’bar’і використовує її.


Зауваження:

Це не означає, що потрібно завжди укладати ключ в лапки. Немає необхідності брати в лапки константи або змінні, оскільки це перешкодить PHP обробляти їх.

<? php

error_reporting (E_ALL) ;

ini_set (‘display_errors’, true) ;

ini_set (‘html_errors’, false) ;

// Простий масив :

$ array = array (1, 2) ;

$ count = count ($ array) ;

for ($ i = 0 ; $ i <$ count ; $ i + +) {

echo "\ nПроверяем $ i : \ n " ;

echo " Погано : ". $ array [‘$ i’]. "\ n " ;

echo " Добре : ". $ array [$ i ]. "\ n " ;

echo " Погано : {$ array [‘$ i’] } \ n " ;

echo " Добре : {$ array [$ i ]} \ n " ;

}

? >

Додаткові приклади, що демонструють цей факт:

<? php

// Показуємо всі помилки

error_reporting (E_ALL) ;

$ arr = array (‘fruit’= >‘apple’,’veggie’= >‘carrot’);

// Вірно

print $ arr [‘fruit’] ; // apple

print $ arr [‘veggie’] ; // carrot

// Невірно. Це працює, але через невизначену константи з

// Ім'ям fruit також викликає помилку PHP рівня E_NOTICE

// Notice: Use of undefined constant fruit - assumed’fruit’in...

print $ arr [ fruit ] ; // apple

// Давайте визначимо константу, щоб продемонструвати, що

// Відбувається. Ми призначимо константі з ім'ям fruit значення’veggie’.

define (‘fruit’,’veggie’);

// Тепер зверніть увагу на різницю

print $ arr [‘fruit’] ; // apple

print $ arr [ fruit ] ; // carrot

// Усередині рядка це нормально. Усередині рядків константи

// Розглядаються, так що помилки E_NOTICE тут не відбудеться

print "Hello $ arr [ fruit ] " ; // Hello apple

// З одним винятком : фігурні дужки навколо масивів всередині

// Рядків дозволяють констант там перебувати

print "Hello {$ arr [ fruit ]} " ; // Hello carrot

print "Hello {$ arr [‘fruit’] } " ; // Hello apple

// Це не буде працювати і викличе помилку обробки, таку як:

// Parse error : parse error, expecting T_STRING’or T_VARIABLE’or T_NUM_STRING’

// Це, звичайно, також діє і з суперглобального змінними в рядках

print "Hello $ arr [‘fruit’] " ;

print "Hello $ _GET [‘foo’] " ;

// Ще одна можливість - конкатенація

print "Hello". $ arr [‘fruit’] ; // Hello apple

? >

Якщо ви перекладете error_reporting в режим відображення помилок рівня E_NOTICE (наприклад, такий як E_ALL), ви відразу побачите ці помилки. За замовчуванням error_reporting встановлена їх не відображати.

Як зазначено в розділі синтаксис, всередині квадратних дужок (‘[‘і’]’) повинно бути вираз. Це означає, що можна писати ось так :