1. Головна
  2. Колонка автора
  3. Рядкові функції в PHP

Рядкові функції в PHP

Для Web розробки найголовнішим інструментом є рядки та функції їх обробки.
Рядкові функції в PHP

Рядки як масиви

У мові програмування РНР рядки розглядаються як масиви, елементами яких є символи. Перший елемент позначається індексом 0, другий – 1 і т.д.
<?php
$str = 'PHP';
echo $str[0]; // P
echo $str[1]; // H
echo $str[2]; // P
Результатом роботи скрипта буде рядок «РНР».

UTF-8. Розширення mbstring

Сьогодні кодування UTF-8 є базовим для додатків. Перехід на UTF-8 не тільки дозволяє використовувати в одному документі тексти різними мовами, але й дозволяє розширити кодування при появі нових символів. Починаючи з РНР 7 символи кодування UTF-8 можуть бути задані за допомогою спеціального синтаксису, в рядках вказується послідовність \u, після якої слідує шістнадцятковий код символу у фігурних дужках:
<?php
echo "\u{0410}"; // A
У UTF-8 англійські символи займають один байт, а українські – два. Якщо звернутися до UTF-8 рядка, як до масиву символів, використовуючи квадратні дужки, у разі англійської мови буде отримано символ, а в разі української – лише половина символу:
<?php
$str = "Hello world";
echo "{$str[0]}<br />"; // H
$str = "Привіт мир!"; // �
echo "{$str[0]}<br />";
Для вирішення проблеми, як правило, підключають розширення Mbstring, що підтримує роботу з багатобайтними кодуваннями, використовують функції Mbstring безпосередньо, або налаштовують РНР таким чином, щоб стандартні рядкові функції РНР замінювалися mbstring-аналогами. Як підключити бібліотеку Mbstring можна дізнатися із статті: Встановлення вебсервера Apache 2.4 з модулем PHP 8.

Функції для роботи із символами

Щоб дізнатися довжину рядка використовується функція Strlen, яка приймає єдиним аргументом рядок символів. Ця функція часто використовується спільно з іншими функціями, а також під час роботи з посимвольним представленням рядка. У наступному прикладі в циклі For виводиться рядок $str, що містить слово Hello. Скрипт опирається на той факт, що елемент $str[0] містить перший символ рядка, $str[1] другий і т. д. до кінця рядка:
<?php
$str = 'Hello';
for ($i = 0; $i < strlen($str); $i++) {
echo $str[$i];
}
Функція Chr приймає аргументом ASCII-код символу і повертає відповідний цьому коду фактичний символ. Наведемо приклад використання функції для отримання символу з кодом 45:
<?php
echo chr(45); // -
Функція Ord виконує дію, зворотню функції Chr - повертає ASCII-код символу, переданого їй як аргумент:
<?php
echo ord('-'); // 45
Якщо параметр $str функції Ord містить більше одного символу, ASCII-код буде повернено лише для першого.

Пошук у рядку

Функція Substr повертає частину рядка (підрядок). Аргументами функції передається вихідний рядок, з якого вирізається текст, номер символу, з якого здійснюється початок підрядка і довжина рядка, що повертається в символах. Якщо довжина не вказана, то повертається вся частина рядка, що залишилася.
<?php
$str = 'Hello, World!';
echo substr($str, 0, 5); // Hello
echo substr($str, 6); // World!
Функція Strpos повертає позицію входження підрядка в рядок. У першому аргументі функції передається рядок, у якому здійснюється пошук, другим аргументом вказується символ пошуку. Також третій необов’язковий параметр дозволяє задати позицію, починаючи з якої здійснюватиметься пошук. Якщо рядок не знайдено, повертається False.
<?php
echo strpos('Hello, world!', ','); // 5

Заміна у тексті

Функції заміни здійснюють перетворення рядків, пов’язані із заміною одних підрядоків на інші, а також видаленням підрядків. Найчастіше використовують функцію Str_replace, яка дозволяє замінити підрядок у тексті іншим підрядком. Аргументами функції виступають шукане значення, значення заміни та рядок, в якому замінюються всі входження. Одним з найпоширеніших завдань є заміна тегів форматування в стилі bbCode їх НТМL-еквівалентами:
<?php
$str = '[і]Текст[/і] курсивом';
$str = str_replace('[і]', '<і>', $str);
$str = str_replace('[/і]', '</і>', $str);
echo $str; // Текст курсивом
Результатом роботи прикладу буде заміна всіх символів і <i> і </i> відповідно.

Крім підрядків, функція Str_replace замість параметрів пошуку та заміни може приймати масиви з рівною кількістю елементів. Елемент масиву пошуку замінюється на відповідний елемент масиву заміни. Якщо необхідно з’ясувати, скільки замін було здійснено в рядку, у цій функції можна вказати необов’язковий останній четвертий параметр, у який після завершення роботи функції буде поміщено кількість здійснених замін.

Функція Trim видаляє початкові та кінцеві пробільні символи з початку та кінця рядка і приймає як аргумент рядок. Найчастіше даних символів буває недостатньо, тому у другому необов’язковому параметрі наводиться список символів, які слід вважати пробільними.

Робота з НТМL-кодом

Оскільки спочатку РНР розроблялася як мова для Web-проектування, тому серед рядкових функцій є кілька спеціально призначених для обробки мови розмітки HTML.

Для виведення даних з нового рядка застосовується спеціальний НТМL-тег <br />, оскільки браузери інтерпретують переводи рядків як звичайний пробіловий символ. Для вирішення завдання заміни звичайних переводів рядків у НТМL-еквівалент РНР надає спеціальну функцію Nl2br.

Особливість функції Nl2br в тому, що тег <br /> вставляється поруч із символом переводу рядка, а не замінює його собою. Така поведінка функції може бути не зручною, якщо текст призначений для підстановки у JavaScript cpипт. У цьому випадку зручніше користуватися функцією Str_replace.

Функція Htmlspecialchars дозволяє перетворити НТМL-код у безпечне представлення. Застосування цієї функції гарантує, що будь-який введений користувачем код (РНР, JavaScript тощо) буде відображений, але не виконуватиметься. Таким чином, функцію слід застосовувати, якщо необхідно вивести у браузері якийсь код або убезпечити введення користувача.

Іноді зручніше взагалі видалити НТМL-теги з тексту. Для цього призначена спеціальна функція Strip_tags, яка видаляє з рядка всі теги, крім тих, які вказуються в другому параметрі функції.

Форматний вивід

Для форматного виводу призначено функцію Printf. Аргументами функції є рядок форматування та змінні, що визначаються рядком форматування. Ця функція дозволяє здійснювати вивід у зручну і потрібну для вас форму, наприклад, можна використовувати для виведення певної кількості символів після коми для грошових одиниць, де обов’язковою вимогою є два знаки після коми.

Об’єднання та розбиття рядків

Для розбивки рядка за певним роздільником призначено функцію Explode, яка повертає масив рядків, кожен з яких відповідає фрагменту вихідного рядка між роздільниками. Можна задати максимальну кількість елементів у результуючому масиві, і, відповідно, в останньому елементі буде зберігатися значення частини рядка, що залишилася. Наведемо приклад використання функції:
<?php
$str = 'Red,Green,Yellow';
echo '<pre>';
print_r(explode(',', $str));
Результатом виконання буде масив:
Array
(
[0] => Red
[1] => Green
[2] => Yellow
)
Функція Implode є зворотною функцією Explode і здійснює об’єднання елементів масиву в рядок:
<?php
$str = ['Red,Green,Yellow'];
print_r(implode(',', $str)); // Red,Green,Yellow
Часто в HTML потрібно обмежити кількість символів на одному рядку, тобто занадто довге слово або речення може порушити дизайн сторінки. Для цього призначено функцію Wordwrap, яка здійснює перенесення на задану кількість символів з використанням символу розриву рядка. Але використовувати її для кодування UTF-8 не рекомендується, оскільки можливим є неправильний результат роботи.

Серіалізація об’єктів та масив

Пара функцій Serialize і Unserialize дозволяють здійснювати упаковку та розпакування масивів та об’єктів.

Як аргумент функція Serialize приймає масив або об’єкт, повертаючи його як закодований рядок. Симетрична їй функція Unserialize приймає як аргумент закодований рядок, повертаючи масив чи об’єкт. Продемонструємо приклад використання обох функцій:
<?php
$array = [1, 2, 'a', 'b', 'c'];
// Упаковуємо масив у рядок
$str = serialize($array);
echo "$str<br />";
// Виймаємо масив з рядка
$arr = unserialize($str);
echo '<pre>';
print_r($arr);
Результатом роботи прикладу будуть наступні рядки:
a:5:{i:0;i:1;i:1;i:2;i:2;s:1:"a";i:3;s:1:"b";i:4;s:1:"c";}
Array
(
[0] => 1
[1] => 2
[2] => a
[3] => b
[4] => c
)

JSON-формат

Процедура серіалізації має кілька недоліків. При спробі серіалізувати вже серіалізовані дані, відновити рядок за допомогою функції Unserialize може не вийти. Тому для збереження масиву в рядок частіше вдаються до формату JSON, який останніми роками набув великої популярності серед Web-розробників. Формат є об’єктом JavaScript. Однією з переваг цього формату є його легке сприйняття людиною. Формат дозволяє задавати рядкові, числові значення, організовувати вкладені структури, аналогічні до асоціативних масивів РНР.

У мові JavaScript, JSON може використовуватися безпосередньо як об’єкт мови. Завдяки цьому формат інтенсивно застосовується для асинхронних АJАХ-запитів. У РНР доступні дві функції для роботи з JSON: Json_encode та Json_decode.

Функція Json_encode перетворює змінну, яка вказана в параметрі функції, в послідовність JSON.
<?php
$arr = [
'color' => 'Жовтий',
'num' => [
'123',
'456'
]
];
echo json_encode($arr);
Результат роботи скрипту з наведеного вище прикладу:
{"color":"\u0416\u0435\u043b\u0442\u044b\u0439","num":["123","456"]}
За замовчуванням функція Json_encode кодує символи UTF-8 у послідовність \uXXXX. Щоб запобігти такому кодуванню, потрібно налаштувати роботу функції за допомогою другого параметра, який може приймати певні константи JSON. Нам потрібна константа JSON_UNESCAPED_UNICODE для того, щоб запобігти кодуванню UTF-8, який і так чудово обробляється всіма іншими мовами, включаючи JavaScript.
echo json_encode($arr, JSON_UNESCAPED_UNICODE); //{"color":"Жовтий","num":["123","456"]}
Для перетворення JSON-рядка в масив РНР призначена функція Json_decode, яка приймає як параметр JSON-рядок і повертає асоціативний масив РНР, якщо значення другого параметра функції виставлено в True:
<?php
$str = '{"color":"Жовтий","num":["123","456"]}';
print_r(json_decode($str, true));
Результат виконання прикладу виглядає так:
Array
(
[color] => Жовтий
[num] => Array
(
[0] => 123
[1] => 456
)

)
Якщо значення цього параметра виставлено в False або не вказано, повертається об’єкт.

#самовчитель_php
Редакція «КовельPost» може не поділяти думку блогерів або дописувачів. За зміст публікацій і їх достовірність відповідальність несуть автори.

Коментарі

Читайте також

Взаємодія РНР з HTML

Взаємодія РНР з HTML
Опишемо, як РНР взаємодіє з HTML і розглянемо два методи протоколу НТТР: GET – передача параметрів у рядку запиту та POST – передача параметрів у тілі НТТР-документа.

Функції в PHP

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

Масиви в PHP

Масиви в PHP
Найбільш часто серед усіх структур зберігання даних зустрічаються масиви, які є індексованими сукупностями змінних одного типу.

Підписуйтесь на наш канал у Telegram! 🚀

@kovelpost