Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
масиви.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
100.86 Кб
Скачать

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

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

Функція list()

Припустимо, у нас є масив, що складається з трьох елементів:

$Names[0] = "Олександр"; $Names[1] = "Микола"; $Names[2] = "Яків";

Припустимо, в якийсь момент нам потрібно передати значення всіх трьох елементів масиву, відповідно трьом змінним: $alex, $nick, $yakov. Це можна зробити так:

$Alex = $names[0]; $Nick = $names[1]; $Yakov = $names[2];

Якщо масив великий, то такий спосіб привласнення елементів масиву змінним не дуже зручний. Є більш раціональний підхід - використання функції list():

list ($alex, $nick, $yakov) = $names;

Якщо нам потрібні тільки "Микола" і "Яків", то ми можемо зробити так:

list (, $nick, $yakov) = $names;

Функція array()

Функція Array() використовується спеціально для створення масивів. При цьому вона дозволяє створювати порожні масиви. Ось методи використання функції Array():

<?php

// Створює порожній масив:

$arr = array();

// Створює список з трьома елементами. Індекси починаються з нуля:

$arr2 = array("Мерзлюк","Петренко","Кличко");

// Створює асоціативний масив з трьома елементами:

$arr3 = array("Мерзлюк"=>"Іван", "Петренко"=>"Петро", "Кличко"=>"Сидір");

// Створює багатовимірний асоціативний масив:

$arr4 = array("name"=>"Мерзлюк", "age"=>"24", "email"=>"merzluk@i.ua");

$arr4 = array("name"=>"Петренко", "age"=>"34", "email"=>"petrentko@i.ua");

$arr4 = array("name"=>"Кличко", "age"=>"47", "email"=>"klychko@i.ua");

?>

Операції над масивами Сортування масивів

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

Сортування масиву за значеннями з допомогою функцій asort() і arsort():

Функція asort() сортує масив, вказаний в її параметрі, так, щоб його значення йшли в алфавітному (якщо це рядки) або у зростаючому (для чисел) порядку. При цьому зберігаються зв'язки між ключами та відповідними їм значеннями, тобто деякі пари ключ => значення просто "спливають" вгору, а деякі - навпаки, "опускаються". Наприклад:

<?php

$A=array("a"=>"Zero","b"=>"Weapon","c"=>"Alpha","d"=>"Processor");

asort($A);

foreach($A as $k=>$v) echo "$k=>$v ";

// Виводить "c=>Alpha d=>Processor b=>Weapon a=>Zero"

// Як бачимо, змінився тільки порядок пар ключ => значення

?>

Функція arsort() виконує те ж саме, за одним винятком: вона впорядковує масив не за зростанням, а за спаданням.

Сортування по ключам за допомогою функцій ksort() і krsort():

Функція ksort() практично ідентична функції asort(), з тією відмінністю, що сортування здійснюється не за значеннями, а за ключами (у порядку зростання). Наприклад:

<?php

$A=array("d"=>"Zero", "c"=>"Weapon", "b"=>"Alpha", "a"=>"Processor");

ksort($A);

for(Reset($A); list($k,$v)=each($A);) echo "$k=>$v ";

// Виводить "a => Processor b => Alpha c => Weapon d => Zero"

?>

Функція для сортування за ключам у зворотному порядку називається krsort() і застосовується точно в такому ж контексті, що і ksort().

Сортування по ключам за допомогою функції uksort():

Досить часто нам доводиться сортувати щось за більш складними критеріями, ніж просто за алфавітом. Наприклад, нехай у $Files зберігається список імен файлів і підкаталогів в поточному каталозі. Можливо, ми захочемо вивести цей список не тільки в лексикографічному порядку, але також і щоб всі каталоги передували файлам. У цьому випадку нам варто скористатися функцією uksort(), написавши попередньо функцію порівняння з двома параметрами, як того вимагає uksort(). (Нижче використовується оператор && - синонім оператору and, а також використовується функція is_dir(), яка перевіряє, чи знаходиться по указаному шляху саме директорія; якщо так, то функція повертає TRUE, якщо ні - FALSE)

<?php

// Ця функція повинна порівнювати значення $f1 і $f2 і повертати:

// -1, якщо $f1<$f2,

// 0, якщо $f1 == $f2

// 1, якщо $f1>$f2

function FCmp($f1, $f2)

{ // Каталог завжди передує файлу

if(is_dir($f1) && !is_dir($f2)) return -1;

// Файл завжди йде після каталогу

if(!is_dir($f1) && is_dir($f2)) return 1;

// Інакше порівнюємо лексикографічно

if($f1<$f2) return -1; elseif($f1>$f2) return 1; else return 0;

}

// Нехай $Files містить масив з ключами - іменами файлів

// В поточному каталозі. Відсортуємо його.

uksort($Files,"FCmp"); // передаємо функцію сортування "за посиланням"

?>

Звичайно, зв'язки між ключами і значеннями функцією uksort() зберігаються, тобто, знову ж таки, деякі пари просто "спливають" вгору, а інші - "осідають".