Функции для строк
Строку можно не только напечатать, но и разобрать на части: вырезать год из даты, заменить слово, проверить, есть ли в адресе знак @. Для этого в PHP есть готовые функции, и в этом уроке разобраны функции для длины, среза, замены и поиска.
Вернёмся к ряду плиток. Каждая плитка в строке пронумерована, и номера, как у элементов списка, начинаются с нуля. По номеру можно взять одну плитку, а функции умеют считать плитки, вырезать кусок ряда и выкладывать новый ряд.
Длина и отдельные символы
Давайте разберём дату по частям:
<?php
$date = '2026-10-23';
echo strlen($date), "\n"; // 10
echo $date[0], ' ', $date[-1], "\n"; // 2 3
echo substr($date, 0, 4), "\n"; // 2026
echo substr($date, 5, 2), "\n"; // 10
echo substr($date, -2), "\n"; // 23Первые две строки вывода:
strlen($date)возвращает длину строки — число плиток: в дате их10, вместе с дефисами;$date[0]— плитка номер0, то есть первый символ;- отрицательный номер считается с конца, и
$date[-1]— последний символ.
Кусок строки: substr
Функция substr($s, $start, $length) вырезает кусок строки:
$start— номер первой плитки куска; отрицательный номер считается от конца;$length— сколько плиток взять; без него кусок идёт до конца строки.
В примере три вызова:
substr($date, 0, 4)берёт четыре плитки с начала — это год.substr($date, 5, 2)начинает с плитки номер5и берёт две — месяц.substr($date, -2)берёт последние две плитки — это день.
Новая строка вместо старой
Остальные функции меняют текст: убирают пробелы, заменяют слова, переводят буквы в другой регистр.
$text = ' hello, world ';
$clean = trim($text);
echo '[', $clean, ']', "\n"; // [hello, world]
echo str_replace('world', 'PHP', $clean), "\n"; // hello, PHP
echo strtoupper($clean), "\n"; // HELLO, WORLD
echo ucfirst($clean), "\n"; // Hello, world
echo str_repeat('-', 5), ' ', strrev('abc'), "\n"; // ----- cba
echo '[', $text, ']', "\n"; // [ hello, world ]Что делает каждая функция:
trimубирает пробелы и переводы строк в начале и в конце строки;str_replace('world', 'PHP', $clean)заменяет каждоеworldнаPHP: сначала что искать, потом на что менять, потом где;strtoupperпереводит латинские буквы в верхний регистр,strtolower— в нижний;ucfirstделает заглавной только первую букву;str_repeat('-', 5)повторяет строку пять раз, аstrrevпереворачивает её.
Последняя строка вывода показывает главное: в $text по-прежнему лежат пробелы. Функция не трогает вашу строку, а строит новую и возвращает её. Чтобы сохранить результат, его присваивают: $text = trim($text);.
Здесь игра в слова — плохая подсказка. В игре плитки переставляют прямо на столе, а функции PHP никогда не трогают ваш ряд и выкладывают рядом новый.
Поиск в строке
str_contains, str_starts_with и str_ends_with
Эти три функции появились в PHP 8 и отвечают на вопрос «есть ли»: возвращают true или false. str_contains ищет кусок где угодно, str_starts_with проверяет начало строки, а str_ends_with — конец. Все три различают регистр: Photo и photo для них разные строки.
strpos
strpos отвечает на другой вопрос — «где»: возвращает номер плитки, с которой начинается первое совпадение. Если совпадения нет, strpos возвращает false.
$file = 'photo.jpg';
var_dump(str_contains($file, 'Photo')); // bool(false)
var_dump(str_ends_with($file, '.jpg')); // bool(true)
var_dump(strpos($file, '.')); // int(5)
var_dump(strpos($file, 'photo')); // int(0)
var_dump(strpos($file, 'png')); // bool(false)Точка стоит на плитке номер 5. Слово photo стоит в самом начале, поэтому его позиция — 0. Расширения png в имени нет, и strpos возвращает false.
Частая ошибка
Результат strpos проверяют прямо в if:
if (strpos($file, 'photo')) { // ✗
echo 'found', "\n";
} else {
echo 'not found', "\n";
}Программа печатает not found, и PHP ничего не сообщает. Вызов strpos вернул 0, а 0, как вы уже знаете, в if считается ложью. Слово стоит в самом начале, но проверка его «не находит».
Эту ловушку любят давать на собеседованиях. До PHP 8 результат сравнивали с false явно: strpos($file, 'photo') !== false — «есть где-то», strpos($file, 'photo') === 0 — «стоит в начале». Сейчас для таких проверок берут str_contains и str_starts_with.
Главное
strlenдаёт длину строки,$s[0]— первый символ,$s[-1]— последний.substr($s, $start, $length)вырезает кусок, а отрицательное начало считается от конца.- Функции для строк возвращают новую строку, а переменная хранит старую, пока её не перезапишут.
strposвозвращает позицию илиfalse, и позиция0вifложна; на вопрос «есть ли» отвечаетstr_contains.