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


 

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

76612. Екатерина II. Просвещенный абсолютизм 33.5 KB
  Екатерина II стремилась построить законную самодержавную монархию обновить ее с учетом новых исторических реалий а не вводить конституционный демократический строй как этого хотели просветители. Большое внимание Екатерина II уделяла совершенствованию законодательства. Екатерина написала для комиссии Наказ в котором обосновала основные принципы политики просвещенного абсолютизма. Екатерина II положила начало крупнейшему музею мира Эрмитажу.
76613. Зарождение либеральной и революционной идеи в России 18 века 29.5 KB
  Русский либерализм одна из значимых тенденций общественной мысли в России. Либерализм в России возник как идеология в период кризиса феодальнокрепостнического строя конец 18 1я половина 19 в. Его появление обусловлено включением России в широкий общеевропейский контекст приобщением высших слоев общества к европейской образованности утверждением идеалов просвещения внедрением идеи общественного договора и т.
76614. Россия и мир в 19 веке. Попытки модернизации и промышленный переворот. Развитие россии при Александре 1 30 KB
  Александр 1 – сын императора Павла I и княгини Марии Фёдоровны, внук Екатерины 2. Родился 23 декабря 1777 г. С самого раннего детства он начал жить у бабушки, которая хотела воспитать из него хорошего государя. После смерти Екатерины на престол вошел Павел
76615. Декабризм. Исторические условия, предпосылки, программы, тактика 28.5 KB
  Серьезное влияние на становление взглядов будущих декабристов оказали идеи западных национально-освободительных движений русская публицистика и просветительская литература. Таким образом можно выделить следующие важнейшие причины восстания декабристов. Несмотря на то что далеко не все было готово заговорщики решили действовать и восстание декабристов произошло в 1825 г. Но Николай 1 был предупрежден о том что готовится восстание декабристов на Сенатской площади.
76616. Николай 1. Западничество и славянофильство 35 KB
  Либеральная мысль в России разделилась на два идейных течения оппозиционных политике Николая I славянофилы и западники. Западники придерживались идеи о том что Россия принадлежит к европейской цивилизации и следовательно путь ее развития проходит по тем же рельсам по которым уже прошла Европа. Западники напротив верили в единство человеческой цивилизации и полагали что Россия стала цивилизованным государством лишь со времен Петра Великого благодаря именно реформам Петра. С особенным интересом западники следили за умственным...
76617. Россия во второй половине 19 в. Реформы и контрреформы 45 KB
  Реформы и контрреформы. Сразу же началась подготовка судебной реформы. Основные принципы судебной реформы определенные с учетом опыта европейских стран была одобрена Александром II в сентябре 1862 г. Важнейшим принципом реформы было признание равенства всех подданных империи перед законом.
76618. Основные направления народничества 33 KB
  езавершенность и половинчатость большинства реформ, проводившихся в борьбе с консерваторами, вызвали всплеск движения революционного народничества. Общество «Земля и воля», созданное Чернышевским, Слепцовым, Обручевым, Серно-Соловьевичем в конце 1861- начале 1862 г. в Петербурге не имело достаточно сил, чтобы стать всероссийской организацией
76619. Распространение марксизма в России 34 KB
  Первые организации пролетариата возникли в Петербурге и Одессе и назывались соответственно Северный союз русских рабочих и Южнороссийский союз рабочих. Оба императора и мысли не допускали чтобы разрешить образование профсоюзов или других даже не политических рабочих организаций. В результате по решению правительства трудовые споры должны были улаживать специальные чиновники фабричные инспектора которые разумеется чаще находились под влиянием предпринимателей нежели заботились об интересах рабочих. со своими соратниками он создал в...
76620. Россия и мир на рубеже XIX-XX веках 45 KB
  Приблизительное представление об историческом месте России в мировом сообществе на рубеже веков дает т. В России же промышленный переворот 90е гг. В России действовала хотя и не повсеместно рыночная система превосходящая западную ее средний уровень по своей динамике. объем промышленной продукции в России возрос в 7 раз в Германии в 5 во Франции в 25 в Англии в 2 раза.