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


 

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

25116. Основные алгоритмические конструкции 48.5 KB
  Обеспечивает многократное выполнение некоторой совокупности действий которая называется телом цикла. Предписывает выполнять тело цикла до тех пор пока выполняется условие записанное после слова пока. Предписывает выполнять тело цикла для всех значений некоторой переменной параметра цикла в заданном диапазоне. Предписывает выполнять тело цикла до тех пор пока не выполнится условие записанное после тела цикла.
25117. Линейный алгоритм 29.5 KB
  Конструкция в которой алгоритмические шаги выполняются в той же последовательности как они записаны то это конструкция следования линейный алгоритм.
25118. Ветвление 35 KB
  Если условие соблюдается то выполняются действия расположенные в ветви под названием Да . В случае несоблюдения условия будут выполнены действия расположенные в ветви Нет . Неполная форма ветвления отличается от полной тем что в одной из ветвей действия отсутствуют . В таком алгоритме в соответствии с условием либо будут выполнены действия имеющиеся в ветви либо начнут сразу выполняться действия расположенные после ветвления.
25119. Циклы 39.5 KB
  Всякий цикл состоит из: заголовка инициализация цикла тела цикла к телу относят все шаги которые повторяются конец цикла. В цикле Пока конструкция состоит из проверки условия и выполнении тела цикла если условие истинно. В цикле До конструкция состоит из выполнении тела цикла проверки условия и повторного выполнения тела цикла если условие ложно. В теле цикла происходят события которые влияют на истинность условия цикла.
25120. Понятие вспомогательного алгоритма 32.5 KB
  Иногда имеет смысл выделить повторяющиеся последовательности команд в самостоятельный блок вынеся его за пределы алгоритма и в нужном месте организовать вызов этого блока указав соответствующий набор параметров. Такой блок реализующий некоторый вполне законченный этап обработки информации называется вспомогательным алгоритмом и может быть вызван из любого места основного алгоритма сколько угодно раз. Заголовок вспомогательного алгоритма имеет вид: имя вспомогательного алгоритма список формальных параметров .
25121. Понятие о формальных языках. Алгоритмический язык 26 KB
  Алгоритмический язык. ЯЗЫК ФОРМАЛЬНЫЙ 1 совокупность исходных принятых за неделимые знаков и правил построения из них слов и словосочетаний; 2 искусственный язык позволяющий заменить операции с объектами операциями с соответствующими им знаками. Буква или символ – это простой неделимый знак совокупность которых образует алфавит языка.
25122. Структура алгоритмических языков 34 KB
  Алфавиты алгоритмических языков состоят обычно из следующих наборов: букв латинского алфавита и алфавита национального языка; цифр от 1 до 9; знаков операций: арифметических логических отношения специальных знаков. в элементарные конструкции языка рассматриваемые в данном тексте как неделимые символы. Словарный состав языка т.
25123. Классификация алгоритмических языков 31.5 KB
  Различают два уровня машинноориентированных языков: символического кодирования ассемблеры и макроязыки макроассемблеры. Это требование значительно уменьшается при использовании машиннонезависимых языков. Структура этих языков ближе к структуре естественных языков например к структуре английского языка чем к структуре машиноориентированных языков.
25124. Классификация задач, решаемых с помощью ПЭВМ 33.5 KB
  В зависимости от типа и количества исходных данных задачи. Если при решении задач в качестве исходных данных используются числовые величины то задачи называются расчетными. Это задачи для решения которых требуются вычисления по математическим формулам. Если для решения задачи требуется однотипная обработка большого количества числовых данных то такие задачи называются задачами обработки данных или табличными.