Часть 1
Почти в любом языке программирования часто приходится работать со строками. Ведь строки - это один из самых основных способов обмена информацией.
Сегодня я решил изучить, как это все реализовано в php, и какие для этого инструменты там есть.
Удаление ненужных символов
Первое что можно сделать в обработке строк это удаление всех пробелов из начала и из конца строки. Для этого используется функция trim:
<?
$str = “ !!Это простая строка\r\n!! “;
$str = trim($str);
echo $str;
// Выведет:
// !!Это простая строка!!
?>
Под пробелами здесь понимается не только символ пробела, а все пробельные символы - табуляция, перевод строки (\n), возврат каретки (\r), нулевой байт (\0).
Если надо удалить не только пробельные символы из конца и начала строки, то просто задаем эти символы вторым аргументом функции:
<?
$num = ‘ 00123.4560000 ’;
$num = trim($num, ‘ 0’);
echo $num;
// Выведет:
// 123.456
?>
Таким образом, мы сказали интерпретатору PHP, что из строки, в которой записано число с плавающей точкой, нужно убрать все незначащие нули и пробелы.
Так же есть функции для удаления этих символов только с одной стороны строки (только из начала или конца) - ltrim (rtrim). ltrim – для удаления символов с левой стороны строки, rtrim – с правой стороны.
Управление регистром символов
Так же есть функции для перевода всей строки в верхний или нижний регистры. Пожалуйста:
<?
$str = ‘БоЛьШие И мАлЕньКие буКвЫ’;
$str = strtolower($str);
echo $str;
// Выведет:
// большие и маленькие буквы
$str = strtoupper($str);
echo $str;
// Выведет:
// БОЛЬШИЕ И МАЛЕНЬКИЕ БУКВЫ
?>
Только при этом нужно учитывать кодировку строки. Например, символы в кодировке UTF-8 правильно преобразованы функциями strtolower/strtoupper не будут. Для этого нужно использовать аналоги этих функций, которые точно будут работать:
mb_strtolower($str, ‘utf-8’);
mb_strtoupper($str, ‘utf-8’);
Кроме этих функций в PHP есть еще две очень полезные функции:
ucfirst - преобразует первый символ строки в верхний регистр;
ucwords - преобразует в верхний регистр первый символ каждого слова в строке.
<?
$str = 'hello world!';
$str2 = ucfirst($str); // Hello world!
$str3 = ucwords($str); // Hello World!
?>
Длина строки
Для обработки строк иногда требуется знать ее длину. И наверно во всех языках программирования есть процедура для этого. В PHP она называется strlen:
<?
$str = ‘строка’;
echo strlen($str); // выведет: 6
?>
Но следует помнить о кодировке, и при использовании кодировки UTF-8 корректнее будет использовать функцию mb_strlen:
<?
$str = ‘строка’;
echo mb_strlen($str, ‘utf-8’); // выведет: 6
?>
Ну вот, в принципе, наиболее часто используемые функции я рассмотрел. На самом деле их гораздо больше, я пока не сталкивался с другими. Позже, когда наберусь немного опыта, напишу обзор других функций для работы со строками.
PHP вообще обладает богатым набором функций на любой вкус. Поэтому прежде чем изобретать велосипед, посмотрите в документацию по PHP - может быть нужную вам функцию, уже написали до вас и оптимизировали под PHP?
Тогда изобретать велосипед и не понадобиться.
Часть 2
Оставшиеся функции для обработки строк я объединил в два класса – функции для выделения подстрок и функции для поиска и замены в строках.
Выделение подстрок
Начнем с одной полезной функции - substr (string, start[, length]). Она выделяет часть строки string длиной length, которая начинается со start-ого символа.
Если задать положительное число в параметре start, то возвращаемая строка будет начинаться с start-ого символа строки string:
Если параметр start отрицательный, то возвращаемая строка будет начинаться c start-ого символа от конца строки string:
Если параметр length указан и он положительный, то возвращаемая строка закончится за length символов от начала start. Получится строка с отрицательной длиной (потому что начало будет за концом строки), поэтому возвращаемая строка будет содержать один символ от начала строки string. Если length указан и он отрицательный, то возвращаемая строка закончится за length от конца строки string. Это опять приведет к строке с отрицательной длиной, поэтому возвращаемая строка будет содержать один символ от начала строки start.
Я никого не запутал? ) Потому что сразу сам не понял всего этого, но функция, судя по всему, очень гибкая в настройке.
Пример:
Чтобы лучше понять, как работает эта функция, советую поэкспериментировать самим с ней.
Поиск и замена
Наверно все знают знаменитую комбинацию клавиш CTRL+H в текстовых процессорах типа Microsoft Word. Она позволяет осуществлять поиск и замену одного текстового фрагмента на другой. PHP также имеет функции для осуществления такой замены.
<?
$str = ‘This is a white rose’;
$str = str_replace(‘white’, ‘red’, $str); // Результат: This is a red rose
?>
Конечно, мы можем использовать эту функцию и для удаления слов из строки. Достаточно во втором аргументе указать пустую строку:
<?
$str = ‘This is a white rose’;
$str = str_replace(‘white’, ‘’, $str); // Результат: This is a rose
?>
Еще есть аналог этой функции - str_ireplace для регистронезависимого поиска и замены строк, но он работает только в новых версиях php.
Также у функции str_replace есть аналоги для работы с регулярными выражениямиereg_replace и preg_replace, но регулярные выражения - это тема огромная и я рассмотрю ее в отдельной статье.
А если мы хотим выделить подстроку и заменить ее на другую строку, то можно использовать функцию substr_replace.
Ну а что касается поиска строки без замены, то тут к нам на помощь приходит функцияstrpos, предназначенная для поиска позиции первого вхождения заданной строки в другую строку:
А если строка world не найдена? В этом случае функция вернет false, но возвращаемое значение нужно сравнивать оператором = = =, а не = =, поскольку первый учитывает тип операнда:
Для подсчета количества вхождений подстроки в заданную строку, тоже есть функция -substr_count:
Теперь и строки не страшны. Ведь в php с ними можно сделать что угодно, особо не заморачивась.
P.S.: Все функции из этой и предыдущей статьи про строки я бы не советовал заучивать), т.к. и сам вряд ли все запомнил. Решил для себя использовать эти статьи как небольшое справочное руководство по строкам.