ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 24.05.2024

Просмотров: 64

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

8. Лекція:

Тема: Робота з рядками

Мета: детально обговорити питання роботи з рядками, вивчити функції, корисні для вирішення різноманітних прикладних задач. Розглянути різні способи виведення рядків, розбиття і з'єднання рядків (функції explode, implode), визначення довжини рядка (strlen), виділення підрядка (strstr, substr).

  1. Дайте визначення масиву.

  2. Опишіть формальний синтаксис визначення масиву в мові РНР.

  3. Які операції можна здійснити з масивами?

  4. Опишіть механізм роботи операції складання масивів. Який її результат?

  5. Поясніть поняття рівності масивів.

  6. Поясніть поняття еквівалентності масивів.

  7. За допомогою яких функцій можна опрацьовувати масиви? Що мається на увазі під обробкою масиву?

  8. Яка функція підраховує кількість елементів в масиві?

  9. Яка функція перевіряє наявність величини в масиві?

  10. Яка функція дозволяє визначити ключ шуканого елемента?

  11. Яка функція дозволяє вибрати всі ключі масиву?

  12. Яка функція дозволяє відсіяти з масиву повторювані значення?

  13. Які функції дозволяють здійснити сортування масивів?

  14. За якими принципами можна сортувати масиви в РНР?

ПЛАН

1 Рядки

2 Пошук елемента в рядку

3 Виділення підрядка

4 Заміна входження підрядка

Рядки

Ймовірно, всі приблизно представляють, що таке тип даних " рядок " і як створити змінну такого типу. В одній з перших лекцій ми приводили три способи завдання рядків: за допомогою одинарних лапок, подвійних лапок і за допомогою heredoc –синтаксиса. Відзначали ми і основні відмінності між цими способами. В основному вони торкаються обробки змінних і управляючих послідовностей усередині рядка.

<?php

echo 'В такому рядку не обробляються змінні і більшість послідовностей;

echo "Тут змінні і послідовності обробляються";

echo <<<EOT

Тут теж обробляються як змінні

так і управляючі послідовності.

І крім того, можна вводити символи лапок

без їх екранування зворотним слешем.


EOT;

?>

Приклад 8.1. Способи завдання рядків

Вже не раз, починаючи з найпершої лекцієї, ми використовували функцію echo. Насправді, echo – не функція, а мовна конструкція, тому використовувати при її виклику круглі дужки не обов'язково. Echo дозволяє виводити на екран рядок, переданий їй як параметр. Параметрів у echo може бути скільки завгодно. Їх розділяють комами або об'єднують за допомогою оператора конкатенації і ніколи не беруть в круглі дужки.

<?

echo "Прийшов ", "побачив ", "переміг ";

// виведе рядок "Прийшов побачив переміг"

// багато хто вважає за краще передавати кілька

// параметрів в echo за допомогою конкатенації

echo "Прийшов " . "побачив " . "переміг ";

// теж виведе рядок

// "Прийшов побачив переміг"

echo ("прийшов ", "побачив ", "переміг ");

// видасть помилку: unexpected ','

?>

Приклад 8.2. Використовування функції echo

Існує скорочений синтаксис для команди echo :

<?=рядок_для_виводу?>

Тут параметр рядок_для_выводу містить рядок, заданий будь-яким з відомих способів, який повинен бути виведений на екран.

Наприклад, такий скрипт виведе на екран червоним кольором "Мене звуть Вася":

<? $name="Вася" ?>

<font color=red>Меня звуть <?=$name?></font>

Окрім мовної конструкції echo існує ряд функцій для виведення рядків. Це в першу чергу функція print і її різновиди printf, sprintf і т.п.

Функція print дозволяє виводити на екран тільки один рядок і, як і echo, не може бути викликана за допомогою змінних функцій, оскільки є мовною конструкцією.

Функція print_r не відноситься до рядкових функцій, як можна було б подумати. Вона відображає інформацію про змінну у формі, зрозумілій користувачу.


Пошук елемента в рядку

Для того, щоб визначити, чи входить даний підрядок до складу рядка, використовується функція strpos() . Синтаксис strpos() такий:

strpos (початковий рядок, рядок для пошуку [,з якого символу шукати])

Вона повертає позицію появи шуканого рядка в початковому рядку або повертає логічне false, якщо входження не знайдено. Додатковий аргумент дозволяє задавати символ, починаючи з якого проводитиметься пошук. Окрім логічного false ця функція може повертати і інші значення, які приводяться до false (наприклад, 0 або ""). Тому для того, щоб перевірити, чи знайдений шуканий рядок, рекомендують використовувати оператор еквівалентності " === ".

<?

$str = "ідея наносити дані на перфокарти і потім прочитувати і обробляти їх автоматично належала Джону Біллінгсу, а її технічне рішення здійснив Герман Холлеріт. Перфокарта Холлеріта виявилася настільки вдалою, що без щонайменших змін проіснувала до наших днів.";

$pos = strpos($str,"Холлерит");

if ($pos !== false) echo "Шуканий рядок зустрівся в позиції номер $pos ";

else echo "Шуканий рядок не знайдений";

/* перевіряємо значення $pos на еквівалентність з false. Інакше рядок, що знаходиться в першій позиції не був б знайдений, оскільки 0 інтерпретується як false. */

?>

Приклад 8.3. Використовування функції strpos()

Якщо значення параметра рядок_для_пошуку не є рядком, то воно перетвориться до цілого типу і розглядається як ASCII-код символу. Щоб одержати ASCII-код будь-якого символу в PHP, можна скористатися функцією ord("символ")

Наприклад, якщо ми напишемо $pos = strpos($str,228); то інтерпретатор вважатиме, що ми шукаємо символ " д ". Якщо додати цю строчку в приведений вище приклад і вивести результат, то одержимо повідомлення, що шуканий рядок знайдений у позиції 1.

Функція, зворотна по значенню ord, – це chr (код символу) . Вона по ASCII-коду виводить символ, відповідний цьому коду.

За допомогою функції strpos можна знайти номер тільки першої появи рядка в початковому рядку. Природно, є функції, які дозволяють обчислити номер останньої появи рядка в початковому рядку. Це функція strrpos() . Її синтаксис такий:

strrpos (початковий рядок, символ для пошуку)

На відміну від strpos() ця функція дозволяє знайти позицію останньої появи в рядку вказаного символу.

Бувають ситуації, коли знати позицію, де знаходиться шуканий рядок, необов'язково, а потрібно просто одержати всі символи, які розташовані після входження цього рядка. Можна, звичайно, скористатися і приведеними вище функціями strpos() і strrpos(), але можна зробити і простіше – виділити підрядок за допомогою призначених саме для цього функцій.


Виділення підрядка

Функція strstr

Кажучи про виділення підрядка з шуканого рядка в язиці PHP, в першу чергу варто відзначити функцію strstr() :

strstr (початковий рядок, рядок для пошуку)

Вона знаходить першу появу шуканого рядка і повертає підрядок, починаючи з цим шуканим рядком до кінця початкового рядка.

Якщо рядок для пошуку не знайдений, то функція поверне false. Якщо рядок для пошуку не належить рядковому типу даних, то вона переводиться в ціле число і розглядається як код символу. Крім того, ця функція чутлива до регістра, тобто якщо ми паралельно шукатимемо входження слів "Ідея" і "ідея", то результати будуть різними. Замість strstr() можна використовувати абсолютно ідентичну їй функцію strchr() .

Приклад 8.4. Виділимо з рядка, що містить назву і автора дослідження, підрядок, що починається із слова "Назва":

<?

$str = "автор: Іванов Іван (<а href=mailto:van@mail.ru>написати лист</a>) Назва: 'Дослідження мов програмування ";

echo "<b>Вихідний рядок: </b>",$str;

if (!strstr($str, "Назва"))

echo "Рядок не найдено<br>";

else echo "<p><b>Отриманий підрядок: </b>"

strstr($str, "Назва");

?>

Приклад 8.4. Використовування функції strstr()

В результаті одержимо:

Початковий рядок: Автор: Іванов Іван (написати лист) Назва: 'Дослідження мов програмування'

Одержаний підрядок: Назва: 'Дослідження мов програмування'

Для реалізації регістронечутливого пошуку підрядка існує відповідний аналог цієї функції – функція stristr (початковий рядок, шуканий рядок) . Діє і використовується вона точно так, як і strstr(), за винятком того, що регістр, в якому записані символи шуканого рядка, не грає ролі при пошуку.

Очевидно, що функція strstr() не дуже часто використовується – на практиці рідко потрібно одержати підрядок, що починається з певного слова або рядка. Але в деяких випадках і вона може стати в нагоді. Крім того, в PHP є і більш зручні функції для пошуку входжень. Наймогутніші з них, звичайно, пов'язані з регулярними виразами. Їх ми розглянемо в одній з подальших лекцій.


Функція substr

Іноді ми не знаємо, з яких символів починається шуканий рядок, але знаємо, наприклад, що починається вона з п'ятого символу і закінчується за два символи до кінця початкового рядка. Як виділити підрядок по такому опису? Дуже просто, за допомогою функції substr() . Її синтаксис можна записати таким чином:

substr (початковий рядок, позиція початкового символу [, довжина])

Ця функція повертає частину рядка довжиною, заданою параметром довжина, починаючи символом, вказаним параметром позиція початкового символу. Позиція, з якої починається підрядок, що виділяється, може бути як позитивним цілим числом, так і негативним. В останньому випадку відлік елементів проводиться з кінця рядка. Якщо параметр довжина опущений, то substr() повертає підрядок від вказаного символу і до кінця початкового рядка. Довжина підрядка, що виділяється, теж може бути задана негативним числом. Це означає, що вказане число символів відкидається з кінця рядка.

Приклад 8.5. Припустимо, у нас є фраза, виділена жирним шрифтом за допомогою тега <b> язика HTML. Ми хочемо одержати цю ж фразу, але в звичайному стилі. Напишемо таку програму:

<?php

$word = "<b>Hello, world!</b>";

echo $word, "<br>";

$pure_str = substr($word, 3, -4);

/* виділяємо підрядок починаючи 3-м символом не включаючи 4 символи з кінця рядка */

echo $pure_str;

?>

Приклад 8.5. Використовування функції substr()

В результаті роботи цього скрипта одержимо:

Hello, world!

Hello, world!

Насправді вирішити таку задачу можна набагато простіше, за допомогою функції strip_tags:

strip_tags (рядок [, допустимі теги])

Ця функція повертає рядок, з якого видалено всі html і php-теги. За допомогою додаткового аргументу можна задати теги, які не будуть видалені з рядка. Список з декількох тегів вводиться без яких-небудь знаків роздільників. Функція видає попередження, якщо зустрічає неправильні або неповні теги.

<?php

$string = "<b>Bold text</b> <i>Italic text</i>";

$str = strip_tags($string);

// видаляємо все теги з рядка

$str1 = strip_tags($string '<b>');

// видаляємо все теги окрім тега <b>

$str2 = strip_tags($string '<i>');

// видаляємо все теги окрім тега <i>

echo $str,"<br>",$str1,"<br>" $str2;

?>