Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
WEB - Лабораторная работа_3 - PHP.pdf
Скачиваний:
90
Добавлен:
26.03.2015
Размер:
232.72 Кб
Скачать

«с точностью до наоборот», то есть создает переменные с именами, соответствующими именам ключей и присваивает им значения элементов массива. Распакуем наш «упакованный массив»:extract($A);

В процессе распаковки может оказаться, что уже существует переменная с именем, как имя ключа в массиве . Для решения этой проблемы у функции extract() предусмотрен второй параметр, который позволяет определить поведение функции extractQ в случае совпадения имен. Значение EXTR_OVERWRITE означает, что существующая переменная с именем ключа будет перезаписана, a EXTR_SKIP — пропущена:

$Name = "Вася";

$Email = "vasya@vvv.org";

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

extract($A,EXTR_OVERWRITE); // $Name = "Ivan", так как мы

//указали EXTR_OVERWRITE

Значение EXTR_OVERWRITE используется по умолчанию и может не указываться. То есть достаточно указать extract($A) и все переменные будут перезаписаны. Кроме того, в PHP предусмотрено еще одно значение второго параметра функции extractQ — это значение EXTR_PREFIX_ALL. В этом случае при разпаковке массива все имена создаваемых переменных будут предварены специальным префиксом, который нужно будет указать в качестве третьего параметра функции extractQ. Например, если мы в рассмотренном выше примере разпаковку произведем следующим образом: extract($A,EXTR_PREFIX_ALL, "D_"); то на выходе будут созданы переменные $D_Name и $D_Email, то есть при создании переменных к имени ключа присоединится указанный префикс D_.

10. Создание диапазона чисел

Иногда нужно создать диапазон чисел, например, для нумерации записей в выводимой таблице. Создать диапазон чисел можно очень просто:

$List = array();

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

Данный цикл создает список, заполненный целыми числами от 10 до 100 включительно. В PHP можно обойтись значительно проще — одним вызовом функции range(10, 100).

11. Небольшой практический пример

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

Листинг 2. Сценарий files,php

<?

//Получаем содержимое текущего каталога. Для нашего сценария текущим будет каталог /var/www/html

//($DocumentRoot)

exec("Is -1",$Files); function cmp($el_l, $el_2)

{

if (is__dir($el_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>Cцeнapий files.php</titlexbody>"; echo "<Ь1>Содержимое каталога /</hlXp>"; foreach($Files as $f)

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

echo "</bodyX/html>"; ?>

Разберемся, как работает сценарий. Сначала мы формируем список файлов и каталогов. Можно было бы воспользоваться стандартными функциями PHP, но намного проще (в Linux) вызвать команды Is с параметром -1 (вывод в одну колонку). Функция ехес() вызывает команду Is и записывает ее вывод в список $Files. Потом мы вызываем функцию uasortQ, которая сортирует наш список в нужном нам порядке — сначала она сортирует каталоги в алфавитном порядке, а затем — файлы. В результате мы получаем список, в котором сначала идут каталоги, отсортированные по алфавиту, а затем — файлы (тоже отсортированные по алфавиту). В цикле foreach мы анализируем элемент нашего списка: если он является каталогом, мы выводим рядом с его именем картинку папки, а если файлом — картинку документа (см. рис. 1).

Рис. 1. Результат работы сценария files.php

Задание

На примере показать отличие массива и списка. Посчитать количество символов в массиве (если массивов несколько, то в первом).

1.Заполнить два массива, соответственно, случайными целыми числами в диапазоне от -20 до 30. Из полученных двух массивов создать два массива отдельно отрицательных и положительных чисел. Для контроля результата сделать распечатку массивов, в том числе исходного.

2.Заполнить два массива случайным образом буквами латинского алфавита. Заполнить третий массив теми буквами, которые входят и в первый и во второй массив, четвертый - оставшимися буквами из первого и второго. Для контроля результата сделать распечатку массивов, в том числе исходного.

3.Заполнить массив случайным образом, выделить в отдельные массивы буквы латинского алфавита, как заглавные, так и прописные. Для контроля результата сделать распечатку массивов, в том числе исходного.

4.Заполнить массив случайным образом в диапазоне от -20 до 20,посчитать среднее всех элементов массива. Все элементы массива, которые меньше среднего значения на 50% заменить на среднее значение. Для контроля результата сделать распечатку массивов, в том числе исходного.

5.В исходном массиве (размер 30 элементов), заполненный цифрами случайным образом, замените все повторные вхождения цифр на 0, а все оставшиеся элементы массива поместить в отдельный массив. Для контроля результата сделайте распечатку массивов, в том числе исходного.

6.Заполните случайным образом 2 массива ( по 20 элементов) поочередно цифрами 1 от до 4 и цифрами от 5 до 9. Объедините эти массивы. Найдите среднее всех элементов массива. Для контроля результата сделайте распечатку массивов, в том числе исходного.

7.В исходном массиве символов, заполненном случайным образом символами с кодами в диапазоне от 21 до 254, выделить в отдельные массивы строчные буквы латинского алфавита. Для контроля результата сделать распечатку массивов, в том числе исходного.

8.Дан массив символов. Ввод массива производить с клавиатуры. Отсортировать массив таким образом, чтобы символы входили в массив по алфавитному порядку. Для контроля результата сделать распечатку массивов, в том числе исходного.

9.Дано 2 массива символов. Ввод массивов производить с клавиатуры. Символы, повторяющиеся в 1 и 2 массиве поместить в 3 массив. Для контроля результата сделать распечатку массивов, в том числе исходного.

10.В исходном массиве (размер 20 элементов), ввод массива производить с клавиатуры, посчитать среднее всех элементов массива. Замените все элементы массива, которые больше среднего значения, на 0, а все оставшиеся элементы массива поместить в отдельный массив. Для контроля результата сделайте распечатку массивов, в том числе исходного.

11.Введите с клавиатуры текст в массив символов. Определите какие из слов в массиве состоят из букв с возрастающими кодами. Разместите эти слова в отдельный массивы. Для контроля результата сделайте распечатку массивов, в том числе исходного.

12.Из исходного массива символов, текст вводить с клавиатуры, символами с кодами в диапазоне от 21 до 254, выделить в отдельные массивы символы цифр. Для контроля результата сделать распечатку массивов, в том числе исходного.

13.Заполнить два массива, размером 20 и 30 элементов, соответственно, случайными целыми числами в диапазоне от -50 до 50. Из полученных двух массивов создать два массива отдельно, один из которых содержит числа от -10 до 0, а другой - от 40 до 50. Для контроля результата сделать распечатку массивов, в том числе исходного.

14.Заполните случайным образом массив (30 элементов) поочередно буквами латинского алфавита от A до H и цифрами 1 от до 5. Посчитать среднее значение всех элементов 2 массива. Заменить в 1 массиве каждый второй элемент на это значение. Для контроля результата сделайте распечатку массивов, в том числе исходного.

15.Заполнить два массива размером 20 и 30 элементов, ввод массивов производить

склавиатуры. Заполнить третий массив теми числами, которые входят и в первый и во второй массив, четвертый - оставшимися числами из первого и второго. Для контроля результата также сделать распечатку массивов, в том числе исходного.

Соседние файлы в предмете Программирование для Web