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.

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

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


 

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

70539. ОПОРНИЙ КОНСПЕКТ ЛЕКЦІЙ ІЗ ДИСЦИПЛІНИ МАКРОЕКОНОМІКА 2.15 MB
  В трансформаційних умовах розвитку економіки України всім учасникам ринкових перетворень потрібний базовий обсяг економічних знань. Що ж до майбутніх фахівців з економіки та менеджменту – студентів економічних спеціальностей, то необхідним є вивчення не лише базового курсу економічної теорії...
70542. БЕЗОПАСНОСТЬ ЖИЗНЕДЕЯТЕЛЬНОСТИ: КОНСПЕКТ ЛЕКЦИЙ 1.36 MB
  Учебная дисциплина БЖД обязательная общеобразовательная дисциплина в которой соединена тематика безопасного взаимодействия человека со средой обитания и вопросы защиты от негативных факторов и чрезвычайных ситуаций. В результате изучения курса Безопасность жизнедеятельности специалист...
70543. Моя родина 16.8 KB
  Програмовий зміст: формувати у дітей поняття «родина, сім'я», виховувати любов до свої родини і до свої родичів, розвивати навички спілкування, відповідати на запитання вихователя; вчити помічати гендерні відмінності, уважно слухати художній твір, виконувати рухи, відповідні до тексту...
70545. Этапы развития технических средств и информационных ресурсов 17.31 KB
  Критерии информационной культуры человека: 1 умение адекватно формулировать потребность в информации; 2 эффективно осуществлять поиск нужной информации; 3 перерабатывать информацию и создавать качественно новую; 4 наличие коммуникативных навыков Развитие мировых информационных...
70546. ИЗМЕРЕНИЕ ИНФОРМАЦИИ 19.22 KB
  В содержательном подходе возможна качественная оценка информации: новая, срочная, важная и т.д. информативность сообщения характеризуется содержащейся в нем полезной информацией - той частью сообщения, которая снимает полностью или уменьшает неопределенность какой-либо ситуации.