68920

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

Лекция

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

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

Украинкский

2014-09-27

97 KB

1 чел.

Лекція № 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.

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

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


 

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

40207. Состав и структура активов предприятия 39.5 KB
  Основные фонды представляют собой наиболее значимую составную часть имущества предприятия и его внеоборотных активов. Основные средства это основные фонды выраженные в стоимостном измерении. Основные средства средства труда которые неоднократно участвуют в производственном процессе сохраняя свою натуральную форму а их стоимость переносится на производимую продукцию частями по мере снашивания. Сроком полезного использования признается период в течение которого основные средства приносят экономические выгоды доход организации.
40208. Социально-экономическая сущность оборотных активов. Состав и структура оборотных средств 26 KB
  В хозяйственной деятельности предприятия необходимо участие не только основных но и оборотных средств необходимых для своевременного выполнения всех хозяйственных операций. Оборотный капитал предприятия его финансовые ресурсы инвестируемые в оборотные активы. Оборотные фонды часть производственных фондов предприятия вещественные элементы которых в процессе производства в отличие от основных фонды расходуются в течение данного производственного цикла и их стоимость переносится на продукт труда целиком и сразу при этом они теряют...
40209. Организация и управление оборотными средствами 38 KB
  Организация оборотных средств на предприятии включает определение потребности в оборотных средствах их состава структуры источников формирования а также регулирование и управление использованием оборотных средств. Одним из основных принципов организации оборотных средств является нормирование Реализация этого принципа позволяет экономически обоснованно установить необходимый размер оборотных средств и тем самым обеспечить условия для успешного осуществления ими своих функций. Ошибочная практика отказа от нормирования оборотных средств...
40210. Оценка эффективности использования оборотных средств 53.5 KB
  Оценка эффективности использования оборотных средств. Эффективность использования оборотных средств характеризуется системой показателей. Важнейшим критерием интенсивности использования оборотных средств является скорость их оборачиваемости. Чем короче период оборота средств и чем меньше они находятся на различных стадиях оборота тем эффективнее они используются тем больше денежных средств может быть направлено на другие цели предприятия тем ниже себестоимость продукции.
40211. Дебиторская задолженность виды, подходы к оценке и управлению 35.5 KB
  Дебиторская задолженность виды подходы к оценке и управлению.ру: Дебиторская задолженность сумма долгов причитающихся предприятию от юридических или физических лиц в итоге хозяйственных взаимоотношений с ними. В бухгалтерском учете под дебиторской задолженностью как правило понимаются имущественные права представляющие собой один из объектов гражданских прав. Следовательно право на получение дебиторской задолженности является имущественным правом а сама дебиторская задолженность является частью имущества организации.
40212. это краткосрочные высоколиквидные финансовые вложения которые можно легко конвертировать в известную сум 24.5 KB
  При составлении отчета о движении денежных средств денежные средства и их эквиваленты суммируются и учитываются общей суммой. Это делается потому что покупка и продажа финансовых вложений в форме денежных эквивалентов считаются частью общего процесса управления денежными средствами предприятия а не источником или способом использования денег. Переводы денежных средств предприятия в инвестиции и обратно не рассматриваются в отчете о движении средств как выплаты и поступления. Денежные средства и их эквиваленты отраженные в отчете о движении...
40213. Понятие и классификация ценных бумаг. Основные виды ценных бумаг 49 KB
  Ценные бумаги имеют упрощенный порядок правопередачи что является их отличительной особенностью. Ценные бумаги можно хранить многие годы рассчитываться ими оставлять в качестве залога дарить и т. Согласно статье 145 Гражданского Кодекса правом удостоверенном ценной бумагой может владеть: предъявитель ценной бумаги владелец ценной бумаги на предъявителя; лицо названное в ценной бумаге владелец именной ценной бумаги; лицо названное в ценной бумаге или распорядитель назначенный таким лицом владелец или распорядитель...
40214. Определение потребности в оборотных средствах 25.5 KB
  Определение потребности в оборотных средствах. Определение потребности предприятия в собственных оборотных средствах осуществляется в процессе нормирования т. определения норматива оборотных средств. Целью нормирования является определение рационального размера оборотных средств отвлекаемых на определенный срок в сферу производства и сферу обращения.
40215. Выбор стратегии финансирования оборотными средствами 24 KB
  Идеальная модель основана на взаимном соответствии категорий текущие активы и текущие обязательства. Модель означает что текущие активы по величине совпадают с краткосрочными обязательствами т. В реальной жизни такая модель практически не встречается. базовое балансовое уравнение модель будет иметь вид: ДП=ВА Агрессивная модель означает что долгосрочные пассивы служат источниками покрытия внеоборотных активов т.