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.

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

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


 

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

26651. Фи́зико-географи́ческое райони́рование 44 KB
  Районирование бывает зональным пояса зоны и подзоны и азональным физикогеографические страны области провинции районы урочища фации отраслевым по рельефу климату почвам и др. Физикогеографическое районирование система территориальных подразделений земной поверхности регионов обладающих внутренним единством и своеобразными чертами природы; процесс их выявления – одна из форм синтеза в физической географии. включает изучение соподчинённых природных территориальных комплексов физикогеографических стран зон районов и др....
26652. Целостность географической оболочки 22 KB
  В результате происходят сложные и непрерывные процессы обмена веществ и энергии приводящие к изменению и развитию составных частей и в целом всей географической оболочки. Эта закономерность прослеживается в пределах как всей географической оболочки так и в небольших комплексах и в отдельных компонентах природы. Целостность системы носит настолько всеобщий характер что если в географической оболочке изменится какойлибо один компонент природы то начнут меняться все остальные.
26653. Экологические проблемы современности 321.5 KB
  С момента изготовленияпервого примитивного орудия человек уже не довольствует предметамисозданными природой а начинает изготовлять вводить в свой обиходпредметы вещества и т. В результате потоки вещества и энергии вызываемые деятельностью человека стали составлять заметную долю от общей величины биогенного круговорота.Отходы побочные продукты производства и быта загрязняют биосферу вызывают деформации экологических систем нарушают глобальный круговорот веществ и создают угрозу для здоровья человека.тонн: 1200 взвешенных веществ 190...
26654. ЭКОЛОГИЧЕСКИЙ ПОТЕНЦИAЛ И ЕГО РAЗРУШЕНИЕ 121.5 KB
  Эксплуaтaция экологического потенциaлa природных систем трaдиционно не входит в кaтегорию природопользовaния, однaко чистый воздух, водa, продукты питaния - это тот же сaмый природный ресурс, столь же дефицитный нa одних территориях, богaтый нa других и точно в той же степени, кaк и прочие ресурсы, исчерпaемый
26655. Природа и общество: этапы взаимодействия 65.5 KB
  многие принципиально новые явления – начала и продолжает формироваться наука все более получающая права гражданства под именем экологии человека происходит экологизация человеческого знания экологизируется человеческое мышление и создаются предпосылки для формирования глобального экологического мировоззрения. Каков был переход от общеэкологических исследований к разработке проблематики экологии человека и как эта последняя формировалась постепенно в недрах общей экологии Наверное не столько разрушения нанесенные человечеством природе...
26656. ЭКОЛОГИЧЕСКИЙ ПОТЕНЦИAЛ И ЕГО РAЗРУШЕНИЕ 113.5 KB
  Чем большим потенциaлом устойчивости облaдaют экосистемы и тем больше чистого водухa воды пищи достaнется в конечном счете человеку. ПАДЕНИЯ УРОВНЯ АРАЛА Непосредственная физическая причина снижения уровня Аральского моря это нарушение водного баланса водоема: превышение расхода воды над приходом. Важную роль сыграли дополнительные потери воды на испарение с поверхности многочисленных водохранилищ построенных в бассейнах Амударьи и Сырдарьи. На сокращении стока Амударьи и Сырдарьи сказались также нерациональное и неэкономное использование...
26657. Актуальные экологические проблемы современности 84 KB
  Тщательное изучение последствий изменения климата приводит к выводу что развивающиеся страны окажутся наиболее уязвимы. Исследование опубликованное Кембриджским Университетом под названием Изменения климата: воздействие на разные страны и их сопричастность представлено учеными из 30 стран в т. Хотя влияние изменения климата не везде одинаково приведенные в исследовании примеры демонстрируют насколько драматичным оно может оказаться для ряда стран.
26658. ЛАНДШАФТ АНТРОПОГЕННЫЙ 43 KB
  Anthropos человек Genes рождающий рожденный Антропогенный ландшафт географический ландшафт: созданный в результате целенаправленной деятельности человека; или возникший в ходе непреднамеренного изменения природного ландшафта. К антропогенным ландшафтам относятся природнопроизводственные комплексы городские поселения и т. В современной ландшафтной архитектуре выделяют понятия природного и антропогенного ландшафта. Они весьма чутки к изменениям вызываемым процессом урбанизации промышленного и сельскохозяйственного освоения...
26659. Аральское море 70 KB
  Одновременно значительно сократились объем воды в Арале с 1093 до 330 км3 то есть на 763 км3 или более чем в три раза и площадь водоема с 68 500 до 36 500 км2 то есть на 32 000 км2 или почти вдвое табл. Пролив Берга соединявший ранее Малое и Большое моря превратился в небольшой но достаточно длинный проток по которому излишки воды из Малого сбрасывались в Большое море. О НЕПОСРЕДСТВЕННОЙ ПРИЧИНЕ ПАДЕНИЯ УРОВНЯ АРАЛА Непосредственная физическая причина снижения уровня Аральского моря это нарушение водного баланса водоема:...