Skip to content

Paradox137/php-practice

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PHP Practice


Exercises


10 RU:

Задание 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 RU:

Разместить код в одном файле 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

05 RU:

Задание 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 когда:
    1. Не достаточно входных данных
    2. Данные не соответствуют выбранной системе счисления
    3. Деление на ноль
  • сессии не использовать

04 RU:

Задание 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?
  • если параметры в строке параметров повторяются, то правильное значение - в последнем.

для сдачи задания продемонстрировать парсинг следующих ссылок:

  1. http://http.ru/folder/subfolder/../././script.php?var1=val1&var2=val2;
  2. https://http.google.com/folder//././?var1=val1&var2=val2;
  3. ftp://mail.ru/?hello=world&url=https://http.google.com/folder//././?var1=val1&var2=val2;
  4. mail.ru/?hello=world&url=https://http.google.com/folder//././?var1=val1&var2=val2;
  5. index.html?mail=ru;
  6. domain2.zone:8080/folder/subfolder/../././../asdss/.././//////../myfolder/script.php?var1=val1&var2=val2;
  7. http://dom.dom.domain2.com:8080/folder/subfolder/./myfolder/script.php?var1=val1&var2=val2?var1=val1&var2=val2.

03 RU:

Задание 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 своих функций
  • исходный массив можно изменять
  • вывод должен быть реализован единожды в конце файла

02 RU:

Задание 2

Реализовать рекурсивную функцию, вычисляющую член последовательности Фибоначчи с некоторым номером двумя способами: без использования рекурсии и с использованием рекурсии. Код разместить в файле 02/index.php.

Необходимые условия сдачи работы:

  • изучить основные требования стандартов оформления PSR-1, PSR-2.
  • подключить анализатор синтаксиса как расширение к NetBeans.
  • реализовать функцию fibonacci($__index), возвращающую член последовательности Фибоначчи с номером $__index.
  • При реализации этой функции учесть следующие условия:
    1. последовательность начинается с двух единиц, в дальнейшем член последовательности явлется суммой двух предыдущих членов;
    2. последовательность нумеруется с 1;
    3. если $__index меньше 1, то функция возвращает 0.
  • подключить отладчик и продемонстрировать процесс отладки функции (приложить скриншоты).
  • вывести первые 10 членов последовательности с помощью цикла for в строку, разделяя члены последовательности пробелами.
  • реализовать рекурсивную функцию fibonacciRecursive($__index), возвращающую член последовательности Фибоначчи с номером $__index.
  • второй строкой вывести первые 10 членов последовательности с использованием рекурсивной функции, разделяя члены последовательности пробелами, сравнить полученные результаты.

01 RU:

Задание 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!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published