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).


 

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

68996. Оператор циклу. Масиви 51.5 KB
  Алгоритм циклічної структури повинен містити такі етапи: 1 підготовку циклу задання початкових значень змінних циклу; 2 тіло циклу дії що виконуються в ньому; 3 модифікацію значень змінних циклу перед кожним новим його повторенням; 4 керування циклом перевірку умови продовження циклу і перехід...
68997. Організація комбінованих типів, оператор приєднання 33 KB
  Описаний вище регулярний тип масив - це структура даних, що містять компоненти однакового типу. Проте часто доводиться зберігати й опрацьовувати сукупності даних різного типу. З цією метою можна було б для кожного типу даних формувати окремий масив і визначати взаємну відповідність...
68998. Організація множин, операції над множинами 34.5 KB
  Множина - це невпорядкований набір різних об’єктів однакового типу. У мові Паскаль використовують тільки скінченні множини, причому всі елементи множини повинні бути однакового типу, визначеного в Паскалі. Тип елементів множини називається базовим.
68999. Процедури та функції 53.5 KB
  У математиці за допомогою функцій задають залежності одних величин від інших які називають аргументами. В алгоритмічних мовах розглядають лише функції для яких можна задати алгоритм визначення їхніх значень. Мова Паскаль допускає тільки такі функції значення яких належать до простих типів.
69000. ПОЛЬОВІ ТРАНЗИСТОРИ В РЕЖИМІ ПЕРЕМИКАННЯ 89 KB
  Режим перемикання транзисторного ключа (рис.14.1) залежить від значень напруг на вході UЗВ, живлення ЕС і опору RН, які забезпечують два статичних стану транзистора: вмикнуто (режим насичення) і вимкнуто (режим відсічки). Розглянемо фізичні процеси в транзисторі в стані вимкнуто.
69001. ІНДИКАТОРНІ ЕЛЕКТРОННО-ПРОМЕНЕВІ ПРИЛАДИ 93 KB
  Конструкція та принцип роботи В електронно-променевій трубці ЕПТ електричний сигнал перетворює ться в світловий. Конструкція ЕПТ Під час попадання електричного променю на люмінофор з останнього вибиваються вторинні електрони. ЕПТ поділяються на три групи: осцилографічні індикаторні кінескопи.
69002. Шуми електронних приладів. Фізична природа шумів 186.5 KB
  Шуми або флюктуації є випадковими процесами. Виникають з подачею напруги живлення на електроди елементу. Їх можна прослуховувати через динамік на вході радіоприймача і підсилювача або побачити на екрані осцилог-рафа. Шуми накладаються на корисні сигнали та рівні постійних напруг і струмів живлення...
69003. P-n перехід у стані рівноваги. Утворення електронно-діркового переходу 342.5 KB
  Розглянемо напівпровідник н п який має дві прилеглих області: одна з провідністю nтипу друга pтипу. Оскільки концентрація дірок у дірковій області pp напівпровідника вище ніж в електронній pn а концентрація електронів у електронній області nn вище ніж у дірковій np між областями буде існувати...
69004. ФІЗИЧНІ ПРОЦЕСИ В р-n ПЕРЕХОДІ ПРИ ДІЇ ЗОВНІШНЬОЇ ЕЛЕКТРИЧНОЇ НАПРУГИ 105.5 KB
  Оскільки концентрація рухомих носіїв заряду в рп переході менша ніж в областях п та р напівпровідника опір рп переходу буде більший ніж опір області п та р тому можна вважати що вся напруга прикладається до рп переходу При дії зовнішньої напруги порушується рівновага між дифузійним і дрейфовим струмами в рп переході...