Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PI_lektsii_2016.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

11.1.4 Побудова бібліотек функцій.

Бібліотеки функцій – ефективний засіб економії часу при побудові додатків. Припустимо, ви написали серію функцій для сортування масиву. Ймовірно, ці функції будуть неодноразово використовуватися в різних додатках. Замість того щоб постійно переписувати ці функції в новий сценарій або копіювати їх через текстовий буфер, набагато зручніше розмістити всі функції сортування в окремому файлі і привласнити йому легко впізнавальне ім'я (наприклад, array_sorting.inc).

Приклад. Бібліотеки функцій (array_sorting.inc)

<?// Файл: array_sorting.inc

// Призначення: бібліотека функцій для сортування масивів.

// Дата: 17 июля 2000 р

function merge_sort ($ array. $ tmparray, $ right, $ left) {

... } function bubble_sort ($ array. $ n) {

...

} function quicksort ($ array. $ right. $ left) {

... } ?>

Бібліотека array_sorting.inc служить накопичувачем для всіх функцій сортування. Це зручно, оскільки функції фактично групуються за своїм призначенням та при необхідності можна легко знайти потрібну функцію. Як видно в приведеному вище прикладі, в початок бібліотеки зазвичай включається заголовок з декількох рядків коментарю, щоб при відкритті файлу бібліотеки можна було відразу отримати коротке зведення його вмісту. Після власної бібліотеки функцій можна включити її в сценарій за допомогою команд PHP include( ) і require( ), в результаті чого всі функції бібліотеки стають доступними.

У загальному вигляді синтаксис цих команд виглядає так:

include(шлях/ім'я_файлу);

require(шлях/ім'я_файлу);

Також існує альтернативний варіант:

include " шлях/ім'я_файлу ";

require " шлях/ім'я_файлу ";

?>

    1. Масиви

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

1. За допомогою конструкції array:

$ Array_name = array ("key1" => "value1", "key2" => "value2");

2. Безпосередньо задаючи значення елементів масиву:

$ Array_name ["key1"] = value1;

Наприклад, нам потрібно зберігати список документів, які будуть видалені з бази даних. Природно зберігати його у вигляді масиву, ключем в якому буде ідентифікатор документа (його унікальний номер), а значенням - назва документа. Цей масив можна створити таким чином:

<? Рhp

$ Del_items = array ("10" => "Наука і життя", "12" => "Інформатика");

// Додаємо елемент в масив

$ Del_items ["13"] = "Програмування на Php";

?>

11.2.1 Операції з масивами.

Масив – це тип даних, з даними цього типу повинні бути визначені операції. Які ж операції можна проводити з масивами? Масиви можна складати і порівнювати.

Складають масиви за допомогою стандартного оператора «+». Взагалі кажучи, цю операцію по відношенню до масивів точніше назвати об'єднанням. Якщо у нас є два масиви, $ a і $ b, то результатом їх складання (об'єднання) буде масив $ c, що складається з елементів $ a, до яких справа дописані елементи масиву $ b. Причому, якщо зустрічаються збігаючи ключі, то в результуючий масив включається елемент з першого масиву, тобто з $ a. Таким чином, якщо складаються масиви в мові PHP, від зміни місць доданків сума змінюється: <? Рhp

$ a = array ( "і" => "Інформатика", "м" => "Математика");

$ b = array ( "і" => "Історія", "м" => "Біологія", "ф" => "Фізика");

$ c = $ a + $ b;

$ d = $ b + $ a;

 print_r ($ c);

 // Отримаємо: Array ([і] => Інформатика [м] => Математика [ф] => Фізика)

 print_r ($ d);

// Отримаємо: Array ([і] => Історія [м] => Біологія [ф] => Фізика)

?>

Звідси порівнювати масиви можна, перевіряючи їх рівність чи нерівність або еквівалентність або нееквівалентність. Рівність масивів – це коли збігаються всі пари ключ / значення елементів масивів. Еквівалентність – коли крім рівності значень і ключів елементів потрібно ще, щоб елементи в обох масивах були записані в одному і тому ж порядку. Рівність значень в PHP позначається символом «==», а еквівалентність – символом «===».

<?php

$a = array("і"=>"Інформатика", "м"=>"Математика");

$b = array("м"=>"Математика", "і"=>" Інформатика ");

if ($a == $b) echo " Масиви рівні і ";

else echo " Масиви НЕ рівні і ";

if ($a === $b) echo " еквівалентні ";

else echo " НЕ еквівалентні ";

// Отримаємо echo "Масиви рівні і НЕ еквівалентні"

?>

  1. Далі розглянемо ще одну важливу операцію з масивом - підрахунок кількості йогоелементів. Для її реалізації в PHP є спеціальна функція.

Функція count. Не раз уже ми використовували функцію count (), щоб обчислити кількість елементів масиву. Насправді ця функція обчислює число елементів в змінній взагалі. Якщо застосувати її до будь-якої іншої змінної, вона поверне 1. Виняток становить змінна типу NULL – count (NULL) є 0.

Крім того, застосовуючи цю функцію до багатовимірного масиву, щоб отримати число його елементів, потрібно використовувати додатковий параметр:

COUNT_RECURSIVE.

<?php

$del_items = array("langs" => array("10"=>"Python", "12"=>"Lisp"),

"other"=>"Інформатика");

echo count($del_items)."<br>";

// виведе 2

echo count($del_items, COUNT_RECURSIVE);

// виведе 4

?>

Ми не будемо повторювати все, що було сказано про масиви в попередніх лекціях. У цій лекції ми розглянемо деякі вбудовані функції для роботи з масивами. І почнемо ми з функцій для пошуку значень в масиві.

Деякі вбудовані функції для роботи з масивами:

    • Функція in_array:

in_array ("шукане значення", "масив", ["обмеження на тип"]);

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

Якщо шукане значення – рядок, то порівняння чутливе до регістру. Наприклад, є масив не вивчених нами мов програмування. Ми хочемо дізнатися, чи міститься в цьому масиві мова PHP. Напишемо наступну програму: <? Php

$ langs = array ("Lisp", "Python", "Java", "PHP", "Perl");

if (in_array ("PHP", $ langs)) echo "Треба б вивчити PHP <br>";

// Виведе повідомлення "Треба б вивчити PHP"

if (in_array ("php", $ langs)) echo "Треба б вивчити php <br>";

// Нічого не виведе, оскільки в масиві є рядок "PHP", а не "php"

?>

Завданням пошуку значення цієї функції може виступати і масив. Правда, це властивість було додано тільки починаючи з PHP 4.2.0. Наприклад:

<?php

$langs = array("Lisp", "Python", array("PHP", "Java"), "Perl");

if (in_array(array("PHP", "Java"), $langs)) echo " Треба б вивчити PHP і Java <br>";    // Виведе повідомлення "Треба б вивчити PHP і Java"

?>

- Функція array_search. Це ще одна функція для пошуку значення в масиві. На відміну від in_array в результаті роботи array_search повертає значення ключа, якщо елемент знайдений, і брехня - в іншому випадку. А ось синтаксис у цих функцій однаковий:

array_search ("шукане значення", "масив", ["обмеження на тип"]);

Порівняння рядків чутливе до регістру, а якщо вказаний опціональний аргумент, то порівнюються ще й типи значень. До PHP 4.2.0, якщо шукане значення не було знайдено, ця функція повертала помилку або пусте значення NULL.

Тепер, навпаки, нехай у нас є масив мов програмування, які ми знаємо. Причому ключем кожного елемента є номер, який вказує, якою за рахунком буде вивчена ця мова.

<?php

$langs = array("Lisp", "Python", "Java", "PHP", "Perl");

if (!array_search("PHP", $langs)) echo " Треба б вивчити PHP <br> ";

else

{

$k = array_search("PHP", $langs);

echo "PHP вивчений $k – м";

}

?>

В результаті ми отримаємо рядок:

PHP вивчений 3 – м

Очевидно, що ця функція більш функціональна, ніж in_array, оскільки ми не тільки отримуємо інформацію про те, що шуканий елемент в масиві є, але і дізнаємося, де саме в масиві він знаходиться. А що буде, якщо шуканих елементів в масиві кілька? У такому випадку функція array_search () поверне ключ першого зі знайдених елементів. Щоб отримати ключі всіх елементів, потрібно скористатися функцією array_keys ().

- Функція array_keys – вибирає всі ключі масиву. Але у неї є додатковий аргумент, за допомогою якого можна отримати список ключів елементів з конкретним значенням. Синтаксис цієї функції такий:

array_keys ( "масив", [ "значення для пошуку"]);

- Функція array_keys () повертає як рядкові, так і числові ключі масиву, організовуючи всі значення у вигляді нового масиву з числовими індексами.

Ми записали масив мов, які вивчили. Список був довгим, і деякі мови були записані кілька разів. У нас виникла підозра, що один з таких мов - Lisp. Давайте це перевіримо:

<?php

$langs = array("Lisp", "Python", "Java", "PHP", "Perl", "Lisp");

$lisp_keys = array_keys($langs, "Lisp");

echo "Lisp входить в масив".count($lisp_keys)." рази:<br>";

foreach ($lisp_keys as $val) echo "- під номером $val<br>";

?>

В результаті отримаємо:

Lisp входить в масив 2 рази:

  1. під номером 0

  2. під номером 5

- Функція array_keys (), як і дві попередні, залежить від регістру, тобто елементів LISP в масиві вона не виявить. array_keys () з'явилася лише в PHP4. У PHP3 для реалізації її функціональності потрібно придумувати свою функцію.

Якщо є функція для отримання всіх ключів масиву, то можна припустити, що існує і функція для отримання всіх значень масиву. Дійсно, вона існує. Це функція array_values (масив). Всі значення переданого їй масиву записуються в новий масив, проіндексований цілими числами, тобто всі ключі масиву губляться, залишаються тільки значення. Але повернемося до нашого прикладу.

Отже, ми з'ясували, що мова Lisp випадково згадана в нашому масиві двічі. Оскільки вивчити одну мову двічі не можна ( «вчив, але забув» не рахується), то потрібно якось позбутися від повторюваних мов. Зробити це досить просто за допомогою функції array_unique ().

- Функція array_unique (масив) – повертає новий масив, в якому елементи, які повторюються фігурують в одному екземплярі. Таким чином, замість кількох однакових значень і їх ключів ми маємо одне значення. Який у нього буде ключ? Як з декількох ключів однакових елементів вибирається той, який буде збережений в новому масиві? Відбувається наступне. Всі елементи масиву перетворюються в рядки і упорядковано. Потім обробник запам'ятовує перший ключ для кожного значення, а інші ключі ігнорує. Спробуємо позбутися від повторюваних мов в списку вивчених.

<?Php   $ langs = array ( "Lisp", "Java", "Python", "Java", "PHP", "Perl", "Lisp");

print_r (array_unique ($ langs));

?> Отримаємо наступне:

Array ([0] => Lisp [1] => Java [2] => Python [3] => PHP [4] => Perl)

Далі розглянемо задачу сортування масиву.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]