СтатьиFAQические задачиИзначально, я задумывал эту статью для рассмотрения наиболее частых вопросов, которые возникают у читателей при написании PHP-кода. Но потом решил немного изменить направление, так как часто возникающие вопросы не всегда интересны и могут не привлечь внимание основной массы web-кодеров. Более предпочтительно, на мой взгляд, будет объяснить решение интересных задач, с которыми ко мне обращаются читатели. Задача №1Имеется две даты, требуется вычислить, сколько дней в промежутке между ними. Также, эта задача интерпретировалась как вычисление количества дней, которые остались до определенной даты. Например, отсчет дней до наступления Нового года. На первый взгляд, довольно не просто заниматься вычислением количества дней в промежутке между датами, которые указаны, к примеру, так: 24.04.07 и 31.12.07. Тут нужно учитывать очень большое количество мелочей. Но все это решается простым применением функции mktime(). С ее помощью можно получить указанную дату в виде количества секунд. Далее с этим огромным сплошным числом можно будет запросто проводить арифметические операции. В нашем случае это будет вычитание. Рассмотрим код, который определяет, сколько осталось дней до 31-го декабря 2007-го года:
<?php
На рисунке 1 показан результат работы этого скрипта. У нас есть два даты, сегодняшняя и дата, которую мы ожидаем. После того как мы перевели их в секунды, функцией mktime(), можно получить разницу. Полученное значение нужно преобразовать в количество дней. Для этого достаточно разделить результат на 84600 (количество секунд в одном дне). В некоторых случаях, число будет дробным, для этого мы делаем округление с помощью функции round(). Задача №2У одних эта задача возникала сразу, как только они справлялись с задачей №1, другие сталкивались с ней в иных примерах. Задача состоит в том, чтобы в зависимости от количества оставшихся дней корректно выводить слово «день». Например, правильно сказать: «осталось 3 дня», но если дней будет пять, то в результате получится «осталось 5 дня». Учет всех комбинаций можно автоматизировать, подставляя верный вариант строки. Код, который выполняет проверку:
<?php
Всего может быть три варианта: «день», «дней» или «дня». Изначально мы устанавливаем значение как «дней», потому как оно будет использоваться в большинстве случаев. Затем идет проверка, если последняя цифра равна 2, 3 или 4, а предпоследняя цифра – это не единица, то строка должна быть - «дня». Проверка предпоследней цифры обеспечивает, чтобы выводило, например, «23 дня», но «113 дней». В случае, если последняя цифра равна 1, а предшествующая любой другой или ее вовсе нет, то результатом будет строка «день». Например, «1 день» или «131 день», но «211 дней». Задача №3Пользователь имеет три поля для ввода: начало ссылки, конец ссылки и их количество, которое нужно сгенерировать. Допустим, введены значения: начало – "http://localhost/file", конец – ".zip", количество – 100. При таких значениях должен создаваться txt-файл, каждая строка которого представляет из себя ссылки вида: http://localhost/file001.zip http://localhost/file002.zip ............................ http://localhost/file100.zip Важным правилом есть заполнение нулями в начале имени файла. То есть, если бы количество ссылок было 1000, они имели бы вид: file0001.zip и т.д. Если бы не этот момент, то все решалось бы в одном цикле. Данная задача требует выполнения цикла while() вложенного в тело цикла for(). Код решения:
<?php
Вывод формы показан на рисунке 2. После выполнения создается или перезаписывается (если он уже существует) текстовый файл с именем linker.txt. В нем будут записаны все сгенерированные ссылки. Задача №4Довольно простая задача, но возникающая несколько раз в различных интерпретациях. Есть текстовый файл, каждая строка которого содержит определенную ссылку. При обращении к скрипту должен осуществляться переход на ссылку, случайно выбранную из файла. Несмотря на то, что задача вызывает немалые затруднения, код ее решения довольно компактный. Создайте текстовый файл данных links.txt, в котором будут храниться ссылки для случайных переходов. Теперь создайте скрипт с именем links.php и напишите в нем такой код:
<?php
Задача №5У нас есть массив. Как можно отправить и затем, без всяких изменений извлечь его для дальнейшей работы. Такой вопрос возникал в самых разных задачах, причем до неприличия часто :). Хотя, должен отметить, об этой возможности не рассказывалось ни в одной из моих статей. Сейчас будем заполнять этот пробел :). В PHP для такой «консервации» массивов существует две полезные функции. Функция serialize() преобразовывает массив в строку, после чего с помощью функции unserialize() можно получить опять полноценный массив. Для примера представлю решение одной из задач. Запись и извлечение массива из cookie. Код скрипта serial.php:
<?php
Форма выполняющая все действия показана на рисунке 3. При нажатии на кнопку «Сохранить массив», мы совершаем преобразование массива в строку, которую в дальнейшем записываем в cookie на 1 день (84600 секунд). Нажимая кнопку "Открыть массив", мы считываем строку из cookie. С помощью обратной функции unserialize() мы получаем массив из строки. После этого можно для проверки вывести массив на экран.
ЗаключениеЗаметьте, что эта статья была составлена не мной, а читателями и ее содержание определялось исключительно ими же. Это значит, что здесь мог быть рассмотрен и ваш вопрос. В дальнейшем, при скоплении подборки интересных задач, возможно выйдет продолжение разбора читательских "траблов" :). Свои вопросы, идеи, пожелания и все остальное (кроме спама :)), можете направлять на e-mail: heel@heel.org.ua. Также это можно сделать у меня на сайте: www.HeeL.org.ua.
Источник: http://www.heel.org.ua |
||