Задание 10
Вывод массива в шаблон
Разместить код в файле 10/index.php CSS разместить в 10/style.css Шаблон раместить в 10/template.html
Необходимые условия сдачи:
- сгенерировать из массива машин carsArr = [ ['manufactor' => 'mazda', 'model' => 'cx-5', "hp" => 80], … ] таблицу по образцу, представленному в файле 09.docx
- шаг объединения задается в переменной $step = 50;
- Несколько моделей одного производителя объединяются;
- Цветовая гамма заголовков меняется от красного к зеленому
- Генерируемый код должен быть в стандарте xhtml 1.0
Разместить код в одном файле 09/index.php
Необходимые условия сдачи:
- !Обратите внимание, смысл задания - не отрезать, как это было раньше со строковыми функциями, а стараться максимально полно описать url одним выражением. То есть регулярок в идеале должно быть близко к одной.
- Каждый смысловой фрагмент регулярки нужно закомментировать. Для этого использовать модификатор x. Например:
preg_match(
"/
[a-z0-9\-\.]+ //имя пользователя
@ //символ @
[a-z0-9\-\.]+ //домен 2 уровня с поддоменами
\.[a-z]{2,} //зона
/xis", $email);
-
написать функцию my_url_pcre_parse(), получающую на вход url-адрес и возвращающую массив следующего вида:
(на примере: protocol://subdomain.domain3.domain2.zone:port/folder/subfolder/../././//../myfolder/script.php?var1=val1&var2=val2) array( 'protocol' => 'protocol', 'domain' => 'subdomain.domain3.domain2.zone', 'zone' => 'zone', '2_level_domain' => 'domain2.zone', 'port' => 'port', 'raw_folder' => 'folder/subfolder/../././//../myfolder/', 'folder' => 'myfolder/', 'script_path' => 'myfolder/script.php', 'script_name' => 'script.php', 'is_php' => true, 'parameters' => array( 'var1' => 'val1', 'var1' => 'val1', ), 'is_error' =>false )
-
любая часть выражения может отсутствовать.
-
если отсутствует протокол, то url определяется как относительный путь (для subdomain.domain3.domain2.zone:port/folder/subfolder/../../../myfolder/script.php?var1=val1&var2=val2)) 'domain' => false, 'raw_folder' => 'subdomain.domain3.domain2.zone:port/folder/subfolder/../../../myfolder/', 'folder' => 'myfolder/'
-
если количество поддоменов > 5, устанавливать флаг ошибки (is_error)
-
для пути к файлу на сервере вычислить его действительное (folder) и введенное (raw_folder) значения: учесть следующие конструкции: ./ - остаемся в той же папке ../ - поднимаемся на уровень вверх (но нельзя выйти за доменное имя!) много // - эквивалентно / вычисление пути оформить отдельной функцией
-
если не указан сценарий, но есть строка параметров, то значит указать сценарий index.php: (для myfolder/?var1=val1&var2=val2) 'script_name' => 'index.php',
-
строка параметров может содержать вопросы: ?var1=is_it_ok?&or=not?
-
если параметры в строке параметров повторяются, то правильное значение - в последнем!
для сдачи задания продемонстрировать парсинг следующих ссылок:
http://http.ru/folder/subfolder/../././script.php?var1=val1&var2=val2
https://http.google.com/folder//././?var1=val1&var2=val2
ftp://mail.ru/?hello=world&url=https://http.google.com/folder//././?var1=val1&var2=val2
mail.ru/?hello=world&url=https://http.google.com/folder//././?var1=val1&var2=val2
?mail=ru
domain2.zone:8080/folder/subfolder/../././../asdss/.././//////../myfolder/script.php?var1=val1&var2=val2
http://dom.dom.domain2.com:8080/folder/subfolder/./myfolder/script.php?var1=val1&var2=val2?var1=val1&var2=val2
Задание 5
Калькулятор с поддержкой различных систем счисления Разместить код в файле 05/index.php CSS разместить в 05/style.css
Необходимые условия сдачи:
Отрисовать калькулятор со следующими полями: [select base] [input 1] [input 2] [+][-] [*][/] [result] [errors]
- select base - выбор доступных систем счисления (по умолчанию доступны bin, oct, dec, hex).
- система счисления не должна изменяться после одного цикла расчетов.
- система счисления должна быть задана в массиве bases_arr и добавление новой системы счисления должно проводиться ТОЛЬКО добавлением необходимых параметров в этот массив (алфавит системы счисления может быть произвольным).
- входные параметры передаются через поля input 1, input 2. При расчетах производится проверка, что введенные символы соответствуют выбранной системе счисления.
- поддерживаются положительные и отрицательные целые числа. Деление осуществляется нацело.
- выходное значение помещается в result, при этом поля input 1, input 2 очищаются.
- если заполнено одно из полей input 1, input 2 и поле result, то result берется как первый аргумент, а заполненное поле input как второй аргумент.
- ошибки выводятся в поле errors когда:
- Не достаточно входных данных
- Данные не соответствуют выбранной системе счисления
- Деление на ноль
- сессии не использовать
Задание 4
Реализовать функцию, осуществляющую разбор url-адреса Для решения задачи использовать ТОЛЬКО функции для работы со строками (нельзя использовать регулярные выражения и функции парсинга языка)
Разместить код в одном файле 04/index.php
Необходимые условия сдачи:
- написать функцию my_url_parse(), получающую на вход url-адрес и возвращающую массив следующего вида:
(на примере: protocol://subdomain.domain3.domain2.zone:port/folder/subfolder/../././//../myfolder/script.php?var1=val1&var2=val2)
array(
'protocol' => 'protocol',
'domain' => 'subdomain.domain3.domain2.zone',
'zone' => 'zone',
'2_level_domain' => 'domain2.zone',
'port' => 'port',
'raw_folder' => 'folder/subfolder/../././//../myfolder/',
'folder' => 'myfolder/',
'script_path' => 'myfolder/script.php',
'script_name' => 'script.php',
'is_php' => true,
'parameters' => array(
'var1' => 'val1',
'var1' => 'val1',
),
'is_error' =>false
)
- для решения задачи использовать ТОЛЬКО функции для работы со строками (нельзя использовать регулярные выражения и функции парсинга языка);
- любая часть URL может отсутствовать;
- если отсутствует протокол, то URL определяется как относительный путь (для subdomain.domain3.domain2.zone:port/folder/ subfolder/../../../myfolder/script.php?var1=val1&var2=val2)) 'domain ' => false, 'rawFolder' => 'subdomain.domain3.domain2.zone:port/folder/subfolder/../../../myfolder/', 'folder' => 'myfolder/';
- если количество поддоменов > 5, устанавливать флаг ошибки (isError);
- для пути к файлу на сервере вычислить его действительное (folder) и введенное (rawFolder) значения: при этом учесть следующие конструкции: ./ - остаемся в той же папке ../ - поднимаемся на уровень вверх (но нельзя выйти за доменное имя!) много // - эквивалентно / вычисление пути оформить отдельной функцией;
- по умолчанию порт – 80;
- если не указан сценарий, но есть строка параметров, то значит указать сценарий index.php: (для myfolder/?var1=val1&var2=val2) 'scriptName' => 'index.php',
- строка параметров может содержать вопросы: ?var1=is_it_ok?&or=not?
- если параметры в строке параметров повторяются, то правильное значение - в последнем.
для сдачи задания продемонстрировать парсинг следующих ссылок:
- http://http.ru/folder/subfolder/../././script.php?var1=val1&var2=val2;
- https://http.google.com/folder//././?var1=val1&var2=val2;
- ftp://mail.ru/?hello=world&url=https://http.google.com/folder//././?var1=val1&var2=val2;
- mail.ru/?hello=world&url=https://http.google.com/folder//././?var1=val1&var2=val2;
- index.html?mail=ru;
- domain2.zone:8080/folder/subfolder/../././../asdss/.././//////../myfolder/script.php?var1=val1&var2=val2;
- http://dom.dom.domain2.com:8080/folder/subfolder/./myfolder/script.php?var1=val1&var2=val2?var1=val1&var2=val2.
Задание 3
Реализовать выравнивание массивов слов с помощью пробелов и переносов строк Разместить код в одном файле 03/index.php
Необходимые условия сдачи:
- задать массив следующей структуры: $word_arrays_arr = array( array("word1.1", "bigword1.2", "moreword1.3", ...), array("word2.1", "bigword2.2", "moreword2.3", ...), array("word3.1", "bigword3.2", "moreword3.3", ...), ... )
- подмассивов может быть произвольное количество.
- слов в каждом массиве может быть произвольное количество.
- длина слова может быть произвольной.
- вывести подмассивы вертикально, выравнивая их поочередно (по левому краю - правому - левому - и.т.д.):
word1.1 word2.1 word3.1 ...
bigword1.2 bigword2.2 bigword3.2
moreword1.3 moreword2.3 moreword3.3
...
- выравнивать внутри тега <pre> с использованием ТОЛЬКО " " и "\n"
- использовать foreach() (а не for())
- можно объявить не более 4 своих функций
- исходный массив можно изменять
- вывод должен быть реализован единожды в конце файла
Задание 2
Реализовать рекурсивную функцию, вычисляющую член последовательности Фибоначчи с некоторым номером двумя способами: без использования рекурсии и с использованием рекурсии. Код разместить в файле 02/index.php.
Необходимые условия сдачи работы:
- изучить основные требования стандартов оформления PSR-1, PSR-2.
- подключить анализатор синтаксиса как расширение к NetBeans.
- реализовать функцию fibonacci($__index), возвращающую член последовательности Фибоначчи с номером $__index.
- При реализации этой функции учесть следующие условия:
- последовательность начинается с двух единиц, в дальнейшем член последовательности явлется суммой двух предыдущих членов;
- последовательность нумеруется с 1;
- если $__index меньше 1, то функция возвращает 0.
- подключить отладчик и продемонстрировать процесс отладки функции (приложить скриншоты).
- вывести первые 10 членов последовательности с помощью цикла for в строку, разделяя члены последовательности пробелами.
- реализовать рекурсивную функцию fibonacciRecursive($__index), возвращающую член последовательности Фибоначчи с номером $__index.
- второй строкой вывести первые 10 членов последовательности с использованием рекурсивной функции, разделяя члены последовательности пробелами, сравнить полученные результаты.
Задание 1
Осуществить верстку макета, представленного в графическом файле, в формат xhtml 1.0 Создать два варианта верстки: в таблицах (тег table), и в блочных контейнерах (тег div) Для сдачи задания использовать структуру в файловой системе: gxxxx/01/maket.png - Экспорт макета в формате png. gxxxx/01/table/index.html (+папка /images, /fonts и файл main.css) - для табличной верстки gxxxx/01/div/index.html (+папка /images, /fonts и файл main.css) - для блочной верстки
Необходимые условия сдачи:
- все стилевые преобразования осуществить с помощью css, вынесенного в стилевой файл.
- в первой части задания запрещается использовать: тег div; атрибуты rowspan collspan;
- во второй части задания запрещается использовать тег table;
- использовать набор правил "по умолчанию" для верстки каждого типа;
- не использовать стилевые аттрибуты тегов, например: (вместо этого css: table{width:100px;});
- разделить макет на смысловые блоки, для содержимого блока использовать смысловые class и id, стараться уменьшить количество используемых определений в html коде.
- каждый смысловой блок закомментировать, например в html и /главное меню/ в css; перед комментарием - пробельная строка
- важно добиться, чтобы верстка не искажалась при добавлении большого количества текста в любой блок верстки;
- верстка должна соответствовать стандарту xhtml 1.0, можно использовать http://validator.w3.org/ для проверки
- использовать смещение на 1 табуляцию для вложенных блоков;
enjoy!