68920

Операції над рядками. Робота з датою та часом

Лекция

Информатика, кибернетика и программирование

Чим же хороші самі рядки в РНР На відміну від С переваги PHPрядків полягають в наступному: Рядок може містити будьякі символи. Нагадаю що рядок не може містити символи з кодом 0 оскільки перший такий символ трактується як кінець рядка.

Украинкский

2014-09-27

97 KB

0 чел.

Лекція № 13

Тема: Операції над рядками. Робота з датою та часом

План

  1.  Рядки в РНР
  2.  Базові функції для роботи з рядками
  3.  Робота з датою і часом

Рядки в РНР

Рядок — це самий універсальний об'єкт в світі РНР. Дуже часто рядки містять числа (як цілі, так і речовинні). Причому РНР дозволяє працювати з такими рядками, як із звичайними числами. Ми можемо «упакувати» в рядок будь-який об'єкт, наприклад, масив і працювати з ним, як з рядком. Як це зробити і для чого це потрібно, ви дізнаєтеся в найостаннішому пункті цього розділу.

Те, що РНР лояльно відноситься до різних типів — це тільки його заслуга (точніше, розробників). Чим же хороші самі рядки в РНР? На відміну від С, переваги PHP-рядків полягають в наступному:

Рядок може містити будь-які символи. Нагадаю, що рядок не може містити символи з кодом 0, оскільки перший такий символ трактується, як кінець рядка.

Рядок може містити довільну кількість символів. Довжина рядка обмежується тільки об'ємом оперативної пам'яті, що дозволяє читати в рядок цілі файли і працювати з ними, як із звичайними рядками, наприклад, порівнювати.

Базовими операціями над рядками є:

Конкатенація рядків (приєднання одного рядка до іншої).

Порівняння рядків.

Конкатенація рядків

У інших мовах програмування, наприклад, мові Pascal, для конкатенації (приєднання) рядків використовується символ «+». Проте в РНР використання оператора «+» некоректно: якщо рядки містять числа, то замість об'єднання рядків, буде виконана операція складання двох чисел. Розглянемо наступний лістинг :

Лістинг. Використання оператора «+» для конкатенації рядків

<?

$а = "20";

$b = "10";

$с = $а + $b; // число + число

echo "?c\n"; // виведе 30

$d = "Hello";

$с = $а + $d; // число + рядок

echo "$c\n"; // виведе 20 ($а)
?>

Як бачите, для конкатенації рядків оператор «+» не підходить. Замість нього слід використовувати оператора «.» (крапка) — див. лістинг 9.2.

Лістинг. Коректна конкатенація рядків

<?

Sa = "20";

$b = "10";

$с = $a.$b; // число + число

echo "$c\n"; // виведе' 2010

$d = "Hello";

$с = $a.$d; // число + рядок

echo "$c\n"; // виведе 20Hello

?>

Порівняння рядків

Подібна ситуація з перетворенням типів відбувається і при порівнянні рядків. Оператори порівняння == і != вимагають перетворення типів. Тому вони не повинні використовуватися для порівняння рядків (див. лістинг 9.3).

|

Лістинг. Порівняння рядків

<?

$а = 0;

$b = 1;

if ($а == "") echo "а - порожній рядок";

if ($b == "") echo "b - порожній рядок";

?>

Даний сценарій повідомить нас, що $а — це порожній рядок. Зв'язано це з тим, що порожній рядок "", перш за все, трактується як 0, а тільки потім — як «порожньо». У PHP операнди порівнюються, як рядки, тільки в тому

випадку, якщо обидва вони — рядки. Інакше вони порівнюються, як числа. При цьому будь-який рядок, який інтерпретатору не вдасться перевести в число (у тому числі і порожній рядок), сприйматиметься, як 0.

Можна придумувати деякі обхідні шляхи (брати числа в лапок, щоб вони сприймалися, як рядки, і т.п.), але при цьому дуже висока вірогідність виникнення помилок.

Краще всього при порівнянні використовувати === (потрійний оператор рівності — оператор еквівалентності). Цей оператор завжди дозволяє проводити коректно порівняння, оскільки він порівнює величини і по значенню, і за типом.

Примітка.

Для порівняння рядків можна також використовувати функцію strval(), проте вона володіє певними обмеженнями і особливостями, що робить її використання небажаним. Тому дана функція, починаючи з PHP 4, вже не використовується.

Базові функції роботи з рядками

Функція strlen() повертає довжину рядок, тобто кількість символів, яка містить рядок.

$а = "Hello"; echo strlen($a); // виведе 5

Функція strpos() шукає підрядок в рядку. Функції потрібно передати три параметри:

Рядок, в якому ми шукатимемо підрядок.

Підрядок.

Позицію, починаючи з якої ми шукатимемо. Даний параметр
необов'язковий і за умовчанням рівний 0 (початок рядка).

Якщо рядок не знайдений, функція повертає false, інакше — номер позиції, з якою починається входження підрядка в рядок:

echo strpos("Hello","el"); // виведе 1

При роботі з даною функцією дуже програмісти, що часто починають, припускаються однієї і тієї ж помилки. Коли я вивчав PHP, я не був виключенням з даного правила. А помилка полягає в наступному. Припустимо, що нам потрібно знайти підрядок ab в рядку abba:

if(strpos("abba","ab")!=false) echo "Рядок ab є в abba";

Очевидно, наш сценарій повинен вивести рядок "Рядок ab є в abba". Проте він нічого не виводить! Річ у тому, що входження рядка ab в рядок abba починається з нульової позиції, а 0 і false при використанні оператора порівняння != є синонімами. Правильніше буде написати так:

if(strpos("abba","ab")!==false) echo "Рядок ab є в abba";

або

if(strpos("abba","ab")===false) echo "Рядка ab немає в abba";

Функція substr(string $str, int $from, int Slength) повертає задану ділянку рядка, тобто підрядок. Повертається підрядок рядка $str, починаючи з позиції $from довжини $length. Якщо параметр $from буде негативним, то відлік підрядка проводитиметься з кінця рядка, а не з початку. Параметр $length є необов'язковим.

$str = "Book";

echo substr($str,l,l); // виведе про

echo substr($str,-l,l); // виведе до

Функція strcmp(Sstrl, Sstr2) порівнює два рядки і повертає наступні значення:

  1.  якщо рядки рівні;
  2.  якщо рядок $strl лексикографічно більше $str2;
    — 1, якщо рядок $strl «менше» $str2.

Функція strcasecmp(string Sstrl, string Sstr2) порівнює два рядки без урахування регістра символів, тобто, рядки Book, BOOK і book для цієї функції рівні.

Заміна в рядку

Функція str_replace(Sstrl, Sstr2, Ssource) замінює в рядку $source (яка в процесі роботи функції не змінюється) всі входження підрядка $strl на подтроку $str2 і повертає результат у вигляді нового рядка. Припустимо, що нам потрібно замінити символи нового рядка \n на тег <br>. Це можна зробити так:

$str = str_replace("\n","<br>",$str); або так:

$str = nl2br($str).

Функція nl2br() працює швидше, ніж str_replace, проте вона не враховує символів перекладу каретки, які часто зустрічаються в текстових файлах Windows.

Функція WordWrap() виявляється дуже корисною, якщо нам потрібно відформатувати текст листа перед його облямовуванням. Дана функція розбиває текст на рядки, завершуючи кожну символом розриву (за умовчанням \n). У кожному рядку повинне бути не більше 75 символів (ви можете вказати іншу кількість). Приклад використання функції WordWrap() приведений в лістингу 9.4.

Лістинг 9.4. Використання функції WordWrap()

<?

$s = "Дуже довгий блок тексту, який потрібне .разбить на частини перед відправкою адресатові"; echo $s."\n\n"; // розбиваємо по 15 символів $s = WordWrap($s, 15, "\n"); echo $s;

?>

Мал. 9.1. Результатработи WordWrap

Примітка.

Функція WordWrap не розбиває блок на рядки, як було сказано вище, а лише вставляє символ розриву через задане число символів.

Функція strip_tags(). Дуже корисною є функція strip_tags(), що видаляє з рядка все HTML-теги:

Ви можете вказати, які теги не варто видаляти. Якщо ви не хочете видаляти теги посилань і тег заголовка <head>, тоді вкажіть їх при виклику функції:

$s = strip_tags($s,"<a><head>");

Робота з датою і часом

Практично жоден серйозний проект не обходиться без роботи з датою і часом, тому не приділити увагу функції date() просто неможливо. Функція date (string $format [, int $timestamp]) використовує два параметри:

Формат дати/часу (рядок).

Сама дата (або час) — так званий timestamp.

Функція виводить дату, що відформатувала, на основі другого параметра або на основі поточної дати, якщо параметр Stimestamp не вказаний. Рядок формату може містити звичайний текст, а також модифікатори (див. табл. 10.1), які при висновку замінюються на відповідні значення.

Модифікатори формату функції Date() Таблиця 10.1

Модифікатор

Опис

і

Кількість секунд, що пройшли з півночі 1 січня 1970 року (з моменту підстави Unix)

Y

Рік (4 цифри)

У

Рік (2 цифри)

z

Номер дня від початку року (від «0» до «365»)

F

Повна англійська назва місяця («December»)

m

Номер місяця (2 цифри: від «01» до «12»)

п

Номер місяця без передуючого нуля: від «1» до «12»

М

Трьохсимвольна англійська абревіатура місяця («Dec»)

d

Номер дня в місяці (2 цифри: від «01» до «31»)

j

Номер дня в місяці без передуючого нуля: від «1» до «31»

I

Текстова назва дня тижня по-англійськи, наприклад, «Monday»

w

Номер дня тижня («0» - Неділя, «1» - Понеділок і т.д.)

D

Трьохбуквена англійська абревіатура дня тижня (наприклад, «Моп»)

А

«До» або «пополудні: «AM» або «РМ»

а

«До або «пополудні «am» або «рт»

Н

Годинник (24-годинний формат) від «00» до «23»

h

Годинник (12-годинний формат) від «01» до «12»

i

Хвилини, від «00» до «59»

s

Секунди, від «00» до «59»

Приклади використання функції date():

echo date(''Сегодня d.m.Y'1); echo date(''Дата створення файлу index.html'',filectime(''index.html' '));

При обробці введених параметрів дуже корисною виявиться функція checkdate(), яка перевіряє коректність введеної дати. Функції потрібно передати три параметри — місяць, день і рік (саме у такій послідовності). Дата перевіряється так:

Рік повинен бути не менше 1900 (і не більше 32767).

Місяць повинен бути в діапазоні 1...12.

Число днів повинне відповідати місяцю і року (функція враховує, високосний рік чи ні).

У РНР для роботи з датою і часом є додаткові функції, але розглянуті функцій цілком достатньо для роботи.


 

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

25006. Сканеры. Принцип действия и классификация сканеров 137.87 KB
  В процессе сканирования оригинал освещается источником света. В основном все планшетные сканеры рассчитаны на получение копии с одного оригинала однако к некоторым моделям сканеров прилагаются дополнительные приспособления для последовательной подачи и сканирования нескольких оригиналов. К преимуществам планшетных сканеров следует отнести простоту использования возможность сканирования как плоских оригиналов в широком диапазоне размеров так и небольших трех мерных объектов. При необходимости сканирования оригиналов нестандартного большого...
25007. Вопросы по Информационным технологиям 25.5 KB
  Виды информации. Виды компьютерной графики. Виды. Виды.
25008. Развитие Интернета и мультимедиа 79.26 KB
  А с помощью графического редактора Swift3D можно сделать эту графику еще и трехмерной вполне возможно что в скором времени фильмы с двумерной графикой отойдут в прошлое. Кроме того в окне присутствует шкала линейка времени timeline со слоями и кадрами на которой регистрируется положение объекта во времени и пространстве. Слои будут прокручиваться параллельно порядок слоев на линейке времени соответствует их взаимному расположению в кадре. Чтобы перейти в тот или иной кадр для его редактирования щелкните по нему мышью на шкале...
25009. Внешние Запоминающие устройства 36.5 KB
  Накопители на магнитных дисках имеют две разновидности накопители на жестких магнитных дисках и накопители на гибких магнитных дисках. Дисковые накопители являются основным устройством для хранения данных. Эти устройства могут считывать и записывать данные на жесткие и гиб кие магнитные диски. Магнитное поле проникает в магнитный слой диска упорядочивает его магнитные частицы домены то в одном то в другом направлении т.
25010. Word. Текстовый процессор Microsoft Word. Отображение документа на экране 49.95 KB
  С помощью Word можно быстро и с высоким качеством подготовить любой документ от простой записки до оригинал-макета сложного издания. Во-первых Word дает возможность выполнять все без исключения традиционные операции над текстом предусмотренные в современной компьютерной технологии: набор и модификацию...
25011. Формы в редакторе Word 156 KB
  Форма – это документ в котором есть изменяемые и неизменяемые элементы. Подготовка стандартных документов нескольким адресатам состоит из основных шагов команда Сервис Слияние: Создание основного документа. Вывод стандартного документа. Создание основного документа.
25012. Об информационной этике и праве 88 KB
  Как должно быть Базовые законы которые являются фундаментом применения программ и баз данных были приняты достаточно давно: закон № 35231 О правовой охране программ для электронных вычислительных машин и баз данных 23. Основными объектами информационной деятельности на ЭВМ закон признает программу для ЭВМ и базу данных. Программа для ЭВМ объективная форма совокупности данных и команд предназначенных для функционирования электронных вычислительных машин ЭВМ и других компьютерных устройств с целью получения определенного...
25013. Программное обеспечение компьютерных сетей 117 KB
  Преимущество же клиентского языка заключается в том что обработка скриптов на таком языке может выполняться без отправки документа на сервер. В общем случае для организации работы пользователей сети с информационными ресурсами распределенными по различным компьютерам необходимы три составляющих: программа установленная на компьютере пользователя которая может осуществлять сетевой запрос с целью получения объекта и предназначенная для его обработки например просмотра изменения или печати документа; программа установленная как...