Работа со строками
Строки играют большую роль, задачи на парсинг строк довольно часто встречаются в PHP , поэтому рассмотрим некоторые базовые функции работы со строками.
Строки представляют некоторый текст, который заключен в одинарные или двойные кавычки:
<?
$str1 = "Hello";
$str2 = 'Welcome';
Но также PHP позволяет определить строку и без кавычек с помощью оператора <<<
, за которым следует метка завершения строки:
$s = <<< LABEL Hello World! Bye World.. LABEL; echo $s;
В данном случае "LABEL" - это название метки, которая указывает на начало и конец строки. Название метки произвольное. То есть все, что расположено между <<< LABEL
и LABEL;
, будет представлять сроку $s
. В частности, браузер выведет нам следующее:
Hello World! Bye World..
И в данном случае, как и в обычной строке мы можем использовать переменные:
<?
$name = "Tom";
$age = 36;
$s = <<< USER
Name = $name
Age = $age
USER;
echo $s;
Обращение к символам строки
PHP позволяет обращаться к отдельным символам строки как к элементам массива по числовому индексу:
<?
$str = "Hello Tom";
echo $str[0]; // получим первый символ - H
$str[1] = "i"; // поменяем второй символ
echo "<br>" . $str . "<br>"; // Hillo Tom
Индексация символов, как и в массиве, начинается с нуля.
Специальные функции и расширение mbstring
Кроме некоторых базовых возможностей по работе со строками PHP также предоставляет ряд специальных функций. Для некоторых из них требуется подключить специальное расширение - mbstring.dll
. Для подключения этого расширения откроем файл конфигурации PHP - php.ini
и найдем в нем следующую строку:
;extension=mbstring
Раскомментируем ее, убрав точку с запятой:
extension=mbstring
Также убедимся, что у нас указан путь к папке расширений. Найдем в файле php.ini
строку:
;extension_dir = "ext"
Эта строка указывает на каталог с подключаемыми расширениями для PHP. По умолчанию все расширения располагаются в папке ext
. Раскомментируем эту строку, убрав точку с запятой, и укажем полный путь к папке ext
. Так, в моем случае папка c php расположена в корне диска C (ОС Windows), соответственно я указываю путь C:\php\ext
:
И так как у нас файл php.ini
изменился, перезапустим веб-сервер Apache.
Подключение расширения mbstring
позволит задействовать некоторые дополнительные функции для работы со строками, которые в стандартном наборе PHP отсутствуют (такие функции обычно начинаются с префикса mb_
).
Функции strpos() и mb_strpos()
Функция strpos($str, $search)
возвращает позицию подстроки или символа $search
в строке $str
или значение false
, если строка $str
не содержит подстроки $search
:
<?
$input = "This is the end";
$search = "is";
$position = strpos($input, $search); // 2
if($position!==false) {
echo "Позиция подстроки '$search' в строке '$input': $position";
}
При использовании этой функции надо учитывать, что индексация символов в строке начинается с нуля, поэтому позиция символа "T" будет равна 0. Поэтому сравнение $position!=false
будет работать некорректно, ведь false
и 0 при сравнении и приведении к общему типу будут представлять одно и то же значение. Поэтому в данном случае корректно использовать только операцию эквивалентности: $position!==false
или $position===false
. Теперь применим
функцию на другом примере:
<?
$input = "Мама мыла раму";
$search = "мы";
$position = strpos($input, $search); // 9
Неожиданно, но результатом функции будет число 9. Хотя мы видим, что истинная позиция подстроки "мы" в исходной строке равна 5.
Все дело в том, что некоторые строковые функции не всегда корректно обрабатывают кириллические символы, и для них лучше использовать другую функцию - mb_strpos()
:
<?
$position = mb_strpos($input, $search); // 5
Функция strrpos()
Функция strrpos() во многом аналогична функции strpos()
, только ищет позицию не первого, а последнего вхождения подстроки в строку:
<?
$input = "This is the end";
$search = "is";
$position = strrpos($input, $search); // 5
Но опять же данная функция не совсем корректно работает с кириллическими символами, поэтому нам надо использовать ее аналог - mb_strrpos()
:
<?
$position = mb_strrpos($input, $search);
Функция trim()
Функция trim($str)
удаляет из строки начальные и конечные пробелы, а также управляющие символы \n, \r, \t
:
<?
$input = " Мама мыла раму ";
$input = trim($input);
Изменение регистра
Для перевода строки в нижний регистр используется функция strtolower
:
<?
$input = "The World is Mine";
$input = strtolower($input);
Для перевода в нижний регистр строки с кириллическими символами можно использовать функцию mb_strtolower
:
<?
$input = mb_strtolower($input);
Для перевода строки в верхний регистр примеяются функции strtoupper()
/mb_ strtoupper()
, которые работают аналогично.
Функция strlen()
Функция strlen()
возвращает длину строки, то есть количество символов в ней:
<?
$input = "Hello world";
$num = strlen($input);
echo $num;
Функция strlen() также некорректно работает с кириллицей, поэтому в этом случае лучше применять функцию mb_strlen()
:
<?
$input = "Мама мыла раму";
$num = mb_strlen($input);
echo $num;
Получение подстроки
Применяя функцию substr($str, $start [, $length])
, можно получить из одной строки ее определенную часть. Данная функция обрезает строку $str
, начиная c символа в позиции $start
до конца строки. С помощью дополнительного необязательного параметра $length
можно задать количество вырезаемых символов:
<?
$input = "The world is mine!";
$subinput1 = substr($input, 2);
$subinput2 = substr($input, 2, 6);
echo $subinput1;
echo "<br>";
echo $subinput2;
Так как данная функция некорректно работает с кириллицей, то вместо нее следует применять функцию mb_substr()
, которая действует аналогично:
<?
$input = "Мама мыла раму";
$subinput1 = mb_substr($input, 2);
$subinput2 = mb_substr($input, 2, 6);
Замена подстрок
Для замены определенной части строки применяется функция str_replace($old, $new, $input)
. Эта функция заменяет в строке $input
все вхождения подстроки $old
на подстроку $new с учетом регистра:
<?
$input = "Мама мыла раму";
$input = str_replace("мы", "ши", $input);
echo $input;