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.

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

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


 

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

45345. Архитектура системы работы со знаниями 48 KB
  Различие между уровнями заключается в языке применяемом для представления знаний. Для работы со знаниями на любом из этих уровней используются следующие базовые компоненты: база знаний; редактор базы знаний; база данных со своей СУБД; решатель; подсистема настройки и управления; подсистема объяснения; диалоговая подсистема. В некоторых источниках совокупность средств обеспечивающих работу со знаниями называют системой управления базой знаний СУБЗ по аналогии с СУБД.
45346. Персептрон Розенблатта 53 KB
  В первоначальных вариантах исполнения персептрона соединения идущие от сузлов формировались случайным образом еще в процессе конструирования системы поэтому они определяли некоторые случайные свойства изображения. Как и в пандемониуме при обучении персептрона вычислялись данные о ценности каждого аузла. Как аузлы так и рузлы персептрона представляли собой математические нейроны которые были рассмотрены ранее. Веса синапсов идущих к рузлам изменялись в процессе обучения персептрона.
45347. КОМПЬЮТЕРНОЕ ТВОРЧЕСТВО 32 KB
  Например каждое слово поэмы состоит из букв которые могут быть закодированы 33 цифрами. При таком соответствии одна длинная строка цифр может рассматриваться как кодированная запись поэмы. Полотно картины можно расчертить на мельчайшие клетки и цвет каждой клетки закодировать цифрами.
45348. Моделирование в музыке 40.5 KB
  В памяти композитора существует множество различных мелодий накопленных им в течение жизни. И естественно полагать что фрагменты этих мелодий отдельные музыкальные фразы музыкальные инварианты осознанно или неосознанно используются композитором в его творческом процессе. Далее следует прочитать следующую за найденной фразой ноту приписать ее к текущей музыкальной фразе а первую ноту из этой фразы выдать в файл формируемых мелодий и вычеркнуть из текущей фразы так чтобы в ней попрежнему оставалось четыре ноты. В результате в файле...
45349. Модели представления знаний 64 KB
  Декларативная модель представления знаний основывается на предположении что проблема предоставления некоторой предметной области решается независимо от того как эти знания потом будут использоваться. Такую модель можно разделить на две части: статически описательные модели знаний и механизм вывода оперирующий этими структурами и практически независимый от их содержательного наполнения. Декларативные модели представления знаний Семантические сети Семантические сети были предложены американским психологом Куиллианом.
45350. Инструментарии построения экспертных систем 30 KB
  Инструментальное средство разработки экспертных систем это язык программирования используемый инженером знаний или и программистом для построения экспертной системы. Оболочки экспертных систем Системы этого типа создаются как правило на основе какойнибудь экспертной системы достаточно хорошо зарекомендовавшей себя на практике. При создании оболочки из системыпрототипа удаляются компоненты слишком специфичные для области ее непосредственного применения и оставляются те которые не имеют узкой специализации.
45351. Интеллектуальные базы данных 29.5 KB
  Развитие приложений ИС требует реализации более легкого и удобного доступа к базам данных. Другой продукт это КЕЕ Connection Intelli Corportion который переводит команды КЕЕ КЕЕ Knowledge Engineering Environment в запросы БД и автоматически поддерживает тракт данных флуктуирующих туда и обратно между базой знаний КЕЕ и реляционной БД использующей SQL. Другими преимуществами такой интеграции являются способности использовать символьное представление данных и улучшения в конструкции операциях и поддержании СУБД.
45352. Методы распознавания образов 27 KB
  Этот метод требует либо большого количества примеров задачи распознавания с правильными ответами либо специальной структуры нейронной сети учитывающей специфику данной задачи. Методы распознавания образов В целом можно выделить три метода распознавания образов: Метод перебора. Например для оптического распознавания образов можно применить метод перебора вида объекта под различными углами масштабами смещениями деформациями и т.
45353. Пандемониум Селфриджа 56 KB
  Демоны это относительно автономные сущности выполняющие элементарные функции. На самом нижнем уровне находятся демоны данных или демоны изображения рис. Вычислительные демоны обрабатывая визуальную информацию от демонов данных вырабатывают признаки и передают их демонам понимания. Демоны понимания всего лишь вычисляют взвешенные суммы сигналов поступающих от вычислительных демонов.