Лабіринти програмування або PHP пошук по масивам

33

Від автора: осінь, зима, от і потягнуло мене на лірику та романтику. Ви думаєте, програмування зовсім не романтичне ремесло? Помиляєтесь! Взяти хоча б масиви. Їх розгалуження дуже схожі на повороти лабіринтів, в яких невчений чоловік може застрягти навіки! Сьогодні ми дізнаємося, як відбувається в PHP пошук по масивам.

Масиви бувають різні…

Сподіваюся, з масивами ви трохи знайомі. Хоча не факт, тому пару «замальовок» на тему :) . Масиви бувають:

Прості – складаються з пар «ключ-значення», де в якості ключа виступає значення індексу. Будь нумерований список можна розглядати як простий масив, у якому номер рядка є індексом, а його зміст — значенням.

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

Також масиви можуть бути:

Одновимірними – використовується один індекс.

Багатовимірними – використовується два і більше індексів.

Виходить, що масиви є однією з найпростіших різновидів структурованого подання даних. Вся інформація в них впорядкована за допомогою ключів, а інформація записана в значення елементів. Але як відбувається пошук ключа в масиві PHP?

Спасибі функцій!

Велика і величезна людська вдячність всім функцій PHP, які полегшують роботу з масивами! Якщо б їх не було (функцій), то сортування даних перетворилася б в справжню «катування» головного мозку!

Ну, може я і трохи прибрехав :) . Але обсяг коду без застосування цих функцій точно б зріс у рази. Знову не вірите? Тоді давайте доведу на прикладі.

У нас є масив, що складається із співробітників. Нам потрібно «зловити» Вольдемарыча. Для цього слід здійснити пошук елемента у масиві PHP за значенням. Ось як буде виглядати реалізація даної задачі без застосування спеціальних функцій:

«;
if($t==$a){
echo «Попався, Вольдемарыч «.»
«;
}
}
?>

PHP поиск по массивам

Виходить, щоб зловити Вольдемарыча, нам потрібно запустити 10 рядків коду. Тепер спробуємо зробити те ж саме з допомогою функції array_search(). В якості аргументів вона приймає значення елемента і сам масив, а повертає індекс (ключ) шуканого. У нашому випадку вона поверне ключ елемента з вмістом «Вольдемарыч».

Ось результат PHP пошуку в масиві за значенням:

PHP поиск по массивам

Але чому функція повернула одиницю, якщо Вольдемарыч у нас проходить «за списком» під номером два? Забув сказати, що індексація масивів починається не з 1, а з 0. Значить все вірно.

«Многомерим» наш масив

У двох попередніх прикладах ми використовували одновимірний масив, в якому для ідентифікації використовується тільки один індекс. Але при роботі зі структурованими даними всі елементи колекцій, списків, стеків та інших різновидів» найчастіше взаємозалежні між собою за декількома «ознаками».

Щоб було зрозуміліше, я пропоную згадати про типи взаємозв’язку між таблицями в одній базі даних. Наприклад, існує таблиця, в яку заносяться ПІБ робітників підприємства. При цьому деякі її стовпці взаємопов’язані з таблицею, де фіксується відвідуваність (робочий табель). А з цієї таблиці може бути пов’язана інша, куди (на основі табеля) обчислюється і заносяться терміни наступного (щорічного) відпустки… тобто один елемент визначається не по одному ключу, а з декількох.

Виходить, що PHP пошук в багатовимірному масиві здійснюється за двома і більше індексами. Щоб продемонструвати це, нам доведеться трохи підправити існуючий варіант «структури».

«Петрович», «vozrast»=>»48 років», «profess»=>»слюсар»);
$fio[2] = array(«name»=>»Вольдемарыч», «vozrast»=>»29 років», «profess»=>»сантехнік»);
$fio[3] = array(«name»=>»Сансаныч», «vozrast»=>»38 років», «profess»=>»токар»);
?>

Тепер подивимося, як відбувається PHP пошук ключа в багатовимірному масиві. Для цього нам знадобиться попередня функція:

«Петрович», «vozrast»=>»48 років», «profess»=>»слюсар»);
$fio[2] = array(«name»=>»Вольдемарыч», «vozrast»=>»29 років», «profess»=>»сантехнік»);
$fio[3] = array(«name»=>»Сансаныч», «vozrast»=>»38 років», «profess»=>»токар»);
$result=array_search(array(«name»=>»Вольдемарыч», «vozrast»=>»29 років», «profess»=>»сантехнік»),$fio);
echo $result;
?>

Але іноді при пошуку значення в багатовимірному масиві PHP потрібно дізнатися, чи є такий елемент чи ні. Для цього знадобиться інша функція in_array(). Вона також в якості параметрів приймає значення елемента і масив, але повертає значення типу bool.

«Петрович», «vozrast»=>»48 років», «profess»=>»слюсар»);
$fio[2] = array(«name»=>»Вольдемарыч», «vozrast»=>»29 років», «profess»=>»сантехнік»);
$fio[3] = array(«name»=>»Сансаныч», «vozrast»=>»38 років», «profess»=>»токар»);
if (in_array(array(«name»=>»Вольдемарыч», «vozrast»=>»29 років», «profess»=>»сантехнік»),$fio))
{
echo «Вольдемарыч знайшовся!»;
}
else{
echo «Вольдемарыч втік!»;
}
?>

PHP поиск по массивам

Двоє зі скриньки…

Пошук збігів у масиві PHP – теж річ потрібна! Але для її реалізації доведеться створювати власне рішення, а не сподіватися на можливості мови. З багатомірністю на сьогодні покінчено. Для демонстрації наступного прикладу повертаємося до початкового варіанту масиву.

«;
if($fio[$t]==$fio[1]){
echo «Збіг у $t елементі«.»
«;
}
}
?>

PHP поиск по массивам

За допомогою цього прикладу ми провели пошук кількості однакових значень у масиві PHP. Для цього в циклі if ми порівнювали значення всіх елементів із заданим. Виявилося, що Вольдемарыч зустрічається у масиві два рази. Сьогодні нам знову вдалося не заблукати в нетрях PHP і дізнатися багато нового. Наприклад, хто такий Вольдемарыч :) .