69697

Змінні і масиви. Взаємні переходи

Лекция

Информатика, кибернетика и программирование

Упаковка змінних в масив. Функція compact() Функція compact() «упаковує» змінні і їх значення в масив. В результаті виходить асоціативний масив, ключами якого є імена, змінних, а значеннями елементів — значення змінних.

Украинкский

2014-10-08

68 KB

0 чел.

Тема 17:  Змінні і масиви. Взаємні переходи

Упаковка змінних в масив. Функція compact()

Функція compact() «упаковує» змінні і їх значення в масив. В результаті виходить асоціативний масив, ключами якого є імена, змінних, а значеннями елементів — значення змінних.

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

$Name = "Вася"-;

$Email = "vasya@vvv.org";

Функція compact("Name",''Email") упакує змінні в один масив:

$А   =   compact("Name","Email");

//отримуємо      $A   =array("Ыате"=>"Вася","Email"=>"vasyaSvvv.org");

Параметри функції compact() описані як mixed, тому що параметри можуть бути не тільки рядками, але і списками рядків. Якщо так воно і є, функція перебирає всі елементи цього списку і упаковує змінні, імена яких вона зустріла. Ось невеликий приклад:

$а   =   "AAA";

$b   =   "BBB";

$с   =   "CCC";

$Arr   =   array("b","с");

$Massiv   =   compact("a",$Arr);

//   $Massiv   =   array("a"=>"AAA","b"="BBB","c"="CCC");

Разупаковка (витягання) змінних з масиву. Функція extract()

Існує функція, протилежна функції compact() — це функція extract(). Вона діє «з точністю до навпаки», тобто створює змінні з іменами, відповідними іменам ключів і привласнює їм значення елементів масиву.

Розпакуємо наш «упакований масив»:

extract($A);

В процесі розпаковування може опинитися, що вже існує змінна з ім'ям, як ім'я ключа в масиві $А. Для вирішення цієї проблеми у функції extract() передбачений другий параметр, який дозволяє визначити поведінку функції extract() у разі збігу імен. Значення EXTR_OVERWRITE означає, що існуюча змінна з ім'ям ключа буде перезаписана, а EXTR_SKIP — пропущена:

• $Name = "Вася"; $Email = "vasya@vvv.org"; $А = compact("Name","Email"); $Name = "Ivan";

extract($A,EXTR_OVERWRITE);   // $Name = "Ivan", оскільки ми

//вказали EXTR_OVERWRITE

Значення EXTR_OVERWRITE використовується за умовчанням і може не указуватися. Тобто досить вказати extract(SA) і всі змінні будуть перезаписані. Крім того, в PHP передбачено ще одне значення другого параметра функції extract() — це значення EXTR_PREFIX_ALL. В цьому випадку при разупаковке масиву всі імена створюваних змінних передуватимуть спеціальним префіксом, який потрібно буде вказати як третього параметра функції extract().

Наприклад, якщо ми в розглянутому вище прикладі разупаковку проведемо таким чином:

extract($A,EXTR_PREFIX_ALL,    "D_");

то на виході будуть створені змінні $D_Name і $D_Email, тобто при створенні змінних до імені ключа приєднається вказаний префікс D_.

7.10. Створення діапазону чисел

Іноді потрібно створити діапазон чисел, наприклад, для нумерації записів в таблиці, що виводиться. Створити діапазон чисел можна дуже просто:

$List   =   array();

for($i = 10;    $ i < = 10 0;    $i + +)    $List[]=$i;

Даний цикл створює список, заповнений цілими числами від 10 до 100 включно. У PHP можна обійтися значно простіше — одним викликом функції range(10, 100).

7.11.   Невеликий практичний приклад

Спробуємо написати сценарій, що виводить вміст каталога. Причому сценарій винен не просто виводити вміст каталога, а в алфавітному порядку і каталоги повинні передувати файлам (див. лістинг 7.2). Ми використовуватимемо раніше написану і приведену в лістингу 7.1 функцію cmp(), яка порівнює файли і каталоги.

Лістинг 7.2. Сценарій files.php

//   Отримуємо   вміст   поточного   каталога.   Для   нашого   сценарію поточним   буде   каталог   /var/www/html //    ($DocumentRoot) exec("ls   -1",$Files);

function   cmp($el_l,$el_2)

{

if    (is_dir(5el_l)   &&    !is_dir($el_2))       return   -1;

if    (!is_dir($el_l)   &&   is_dir($el_2))       return   1;

if($el_K$el_2)    return   -1;

elseif($el_l>$el_2)    return   1;

else   return   0; }

uasort($Files,"cmp") ;

echo   "<html><title>CueHapnH   files.php</title><body>"; echo      "<Ь1>Содержимое   каталога   /</hl><p>";

foreach($Files   as   $f)

if    (is_dir($f))      echo   "<br><img   src=folder.png>$f"; else   echo   "<br><img   src=doc.png>$f";

echo   "</body></html>";

Розберемося, як працює сценарій. Спочатку ми формуємо список файлів і каталогів. Можна було б скористатися стандартними функціями PHP, але набагато простіше (у Linux) викликати команди ls з параметром —1 (висновок в одну колонку). Функція exec() викликає команду ls і записує її висновок в список $Files.

Потім ми викликаємо функцію uasort(), яка сортує наш список в потрібному нам порядку — спочатку вона сортує каталоги в алфавітному порядку, а потім — файли. В результаті ми отримуємо список, в якому спочатку йдуть каталоги, відсортовані за абеткою, а потім — файли (теж відсортовані за абеткою).

У циклі foreach ми аналізуємо елемент нашого списку: якщо він є каталогом, ми виводимо поряд з його ім'ям картинку теки, а якщо файлом — картинку документа (див. мал. 7.1).


 

А также другие работы, которые могут Вас заинтересовать

2358. Соціально-економічне життя народу та український національний рух у першій половині XIX ст 35 KB
  Мета: провести підсумкове оцінювання знань, як кінцевий етап оцінювання знань з теми Соціально-економічне життя народу та український національний рух у першій половині XIX ст..
2359. Розвиток освіти і науки України наприкінці XVIII – у першій половині XIX ст. 35 KB
  Мета: виявити загальні закономірності й особливості розвитку культури в Україні в першій половині XIX ст., проаналізувати стан розвитку освіти, науки.
2360. Розвиток українського мистецтва наприкінці XVIII – у першій половині XIX ст. 37.5 KB
  Мета: проаналізувати стан розвитку літератури, музичного, образотворчого мистецтва, архітектури.
2361. Культура України кінця XVIII – першої половини XIX ст. 33 KB
  Мета: з’ясувати особливості традиційно-побутової культури в українському селі та місті, проаналізувати стан релігійного життя та долі української жінки в першій половині XIX ст. в Україні.
2362. Культурне життя на українських землях наприкінці XVIII – у першій половині XIX ст. 35 KB
  Мета: провести підсумкове оцінювання знань, як кінцевий етап оцінювання знань із теми: Культурне життя на українських землях наприкінці XVIII – у першій половині XIX ст. э оцінити рівень навчальних досягнень учнів.
2363. Аграрні відносини на українських землях у другій половині XIX ст. 44 KB
  Мета: з’ясувати особливості соціально-економічного розвитку українських земель напередодні селянської реформи 1861 р., ознайомити учнів із проведенням аграрної реформи 1861 р., її особливостями і наслідками.
2364. Економічний розвиток України в другій половині XIX ст. 47 KB
  Мета: довести колоніальний характер економічної політики Російської та Австрійської імперій в Україні у пореформений період, розкрити особливості й перебіг промислового перевороту в Україні, аргументовано довести колоніальний характер товарообміну, який склався в другій половині XIX ст. між українськими землями, Російською та Австрійською імперіями.
2365. Реформи адміністративно-політичного устрою 60-70-х років XIX ст. на українських землях у складі Російської імперії. 39.5 KB
  Мета: з’ясувати вплив реформ 60-70-х років XIX ст. на соціально-економічний розвиток і політичне становище в Україні.
2366. Зміни в соціальному розвитку українського суспільства. 31.5 KB
  Мета: дослідити зміни, що відбулися у соціальному розвитку українського суспільства у другій половині XIX ст., проаналізувати суперечливі процеси модернізації повсякденного життя; висвітлити причини та напрямки трудової еміграції українців.