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


 

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

76763. Наружное основание черепа 183.43 KB
  Наружная граница между сводом и основанием проходит по носолобному шву надглазничным краям скуловым отросткам лобной кости подвисочному гребню клиновидной по основанию скуловых отростков височных костей над наружным слуховым отверстием по верхнему краю через основание сосцевидных отростков; заканчивается по верхней выйной линии и наружному затылочному выступу. В своде по наружной поверхности выделяют передний отдел лоб лобная область с рельефом: чешуя лобной кости на ней лобные бугры правый и левый; надбровные дуги у границы с...
76764. Классификация соединений костей 181.35 KB
  Среди соединений костей различают по анатомической классификации: непрерывные когда между концами костей имеется сплошная соединительная или хрящевая а в последующем и костная ткань; прерывные соединения или суставы главными признаками которых является наличие щели полости между суставными концами костей и синовиальной оболочки в капсуле; полупрерывные соединения или симфизы когда в прослойке между костями хряща или фиброзной ткани появляется щель. В основу биомеханической классификации положены оси проводимые через соединения костей...
76765. Строение и классификация суставов 184.21 KB
  Дополнительные вспомогательные структуры суставов включают: прослойки из хряща: диски мениски суставные губы; укрепляющие устройства из соединительной ткани: связки мембраны окружающие зоны мышечные сухожилия; скопления жировой клетчатки под синовиальной оболочкой; синовиальные складки сумки влагалища завороты синусы. Фиброзный наружный слой образуется из плотной волокнистой соединительной ткани с обилием продольных волокон; укрепляется связками: капсульными внутрикапсульными и внекапсульными. Синовиальный слой мембрана...
76766. Соединения костей черепа 186.79 KB
  В костном небе различают: срединный небный шов – между небными и отростками правой и левой верхней челюсти и горизонтальными пластинками небных костей; поперечный небный шов перпендикулярный срединному шву и соединяющий верхние челюсти с небными костями. Межнижнечелюстной симфиз соединяет правую и левую половины тела нижней челюсти в области подбородка в плодном периоде и грудном возрасте. Основными частями височнонижнечелюстного сустава являются: правая и левая головки нижней челюсти; правая и левая нижнечелюстные ямки височной кости;...
76767. Развитие и строение скелета верхней конечности 185.58 KB
  Вначале кости обращены сгибательной поверхностью к туловищу потом поворачиваются на 90 градусов кнаружи. Все кости кроме ключицы развиваются как вторичные то есть проходят через перепончатую хрящевую и костную стадии. Лопатка плечевая кость кости предплечья трубчатые кости кисти развиваются эндо и перихондральным окостенением кости запястья – энхондральным. Трубчатые кости растут в длину за счет метаэпифизарных хрящей: длинные – верхнего и нижнего ростковая активность каждого зависит от возраста и меняется поочередно короткие –...
76768. Кости и соединения плечевого пояса 181.88 KB
  Строение лопатки – плоской кости треугольной формы: реберная передняя поверхность с лопаточной ямой для одноименной мышцы; задняя дорсальная поверхность с лопаточной остью над и подостной ямами для одноименных мышц; три угла: латеральный угол с суставной впадиной над и подсуставным бугорками шейкой лопатки; верхний угол для прикрепления поднимателя лопатки нижний угол на уровне УIII го межреберного промежутка –ориентир при определении границ легких; два крупных отростка: клювовидный акромиальный с суставной поверхностью для...
76769. Плечевой сустав 180 KB
  У основания клювовидного отростка располагается подсухожильная синовиальная сумка подлопаточной мышцы сообщающаяся с полостью сустава. Мышцы выполняющие движения в плечевом суставе Сгибание – дельтовидная передние пучки большая грудная двуглавая клювоплечевая мышцы. Разгибание – дельтовидная задние пучки длинная головка трехглавой широчайшая мышца спины большая круглая и подостная мышцы. Отведение до горизонтального уровня – дельтовидная и надостная а выше отводят трапециевидная мышца ромбовидные подниматель лопатки приведение...
76770. Соединения костей предплечья и кисти 183.33 KB
  В своей верхней части под проксимальным лучелоктевым суставом она имеет косой пучок толстых фиброзных волокон именуемый косой хордой. Проксимальный лучелоктевой сустав образуется при сочленении суставной окружности на головке луча и лучевой вырезки на проксимальном эпифизе локтевой кости. Он входит в состав локтевого сустава.
76771. Локтевой сустав 179.76 KB
  Шаровидный плечелучевой сустав изза тесной связи с другими двумя суставами утрачивает одну ось и движения в нем осуществляются по фронтальной и продольной оси. Капсула спереди и сзади тонкая возможность вывихов и укреплена по бокам внутри и снизу связками: боковыми коллатеральными: локтевой и лучевой; внутрисуставной кольцевой связкой лучевой кости; снизу квадратной – между лучевой шейкой и дистальным краем лучевой вырезки на локтевой кости. Спереди у лучевой шейки возникает слепое синовиальное выпячивание.