Манипулирование строками
Форматирование строк
Часто строки, вводимые пользователем, приходится очищать от служебных символов, прежде чем эти строки можно будет использовать по назначению. Также, если предполагается сравнение данной строки с другими или хранение ее в базе, следует использовать следующие функции.
string trim(string input) - удаляет пробелы, , , , v, � в начале и конце строки;
string ltrim(string input) - аналогична trim(), но удаляет пробелы в начале(слева) строки;
string chop(string input) - аналогична trim(), но удаляет пробелы в конце(справа) строки;
В большинстве случаев, когда скрипт (использующий информацию из файла либо из базы) работает некорректно, применение данных функций позволяет устранить ошибки.
Функция nl2br() принимает строку в качестве параметра и заменяет в ней все символы новой строки XHTML-дескриптором.
Это полезно при выводе длинной строки в окне браузера.
Изменение регистра строки
Пусть дано выражение $str = "Органная музыка очень красива".
Тогда, после применения следующих функций:
strtoupper($str) возвратит "ОРГАННАЯ МУЗЫКА ОЧЕНЬ КРАСИВА";
strtolower($str) - "органная музыка очень красива",
ucfirst($str) сделает первый символ (если он буквенный) строки прописным - "Органная музыка очень красива";
ucwords($str) - сделает прописным первый символ каждого слова в строке - "Органная Музыка Очень Красива";
Объединение и разделение строк с помощью строковых функций
Часто возникает необходимость просматривать части строк по отдельности. Распространенная ситуация - клиент приносит вам .csv файл, созданный в Excel. И информацию, содержащуюся в этом файле с разделителями, необходимо представить в Web. Пусть в данном файле есть строка "Арманьяк;0,7 л.;Испания;1200 р.". Считав ее из файла с помощью fgets(), мы можем обработать ее следующими функциями:
array explode(string separator, string input [, int limit]) - принимает строку input и делит ее на части по заданной разделительной строке separator; части строк возвращаются в виде массива; Можно ограничить число таких частей посредством необязательного параметра limit.
Пример:
$str = fgets($f, 1024);
$a = explode(";", $str);
print_r($a);//распечатка массива
string strtok(string input, string separator) - в отличии от функции explode(), которая делит за один вызов на части сразу всю строку, данная функция позволяет получать фрагменты строки по одному за один вызов. В качестве разделителя можно использовать символ или строку символов, но следует иметь в виду, что строка ввода будет разделяться по каждому из символов разделителя, а не по всей строке разделителя. Внимание! Для получения первой лексемы из строки нужно вызвать функцию со строкой, которую требуется разбить на лексемы, и с разделителем. Чтобы получить из заданной строки последующие лексемы, достаточно передать функции один параметр, а именно, разделитель. Функция сохраняет собственный внутренний указатель на позицию разделителя в строке. Как правило, функция strtok() используется следующим образом:
$str = fgets($f, 1024);
$tok = strtok($str, ";");
echo $tok."";
while ($tok != ";")
{
$tok = strtok(";");
echo $tok."";
}
Функция substr()
Данная функция позволяет получить доступ к подстроке между заданными начальной и конечной позициями в строке.
Прототип: string substr(string str, int start[, int length]) - возвращает подстроку из строки str, начиная с позиции start длиной length. Если вызывать функцию с отрицательным значением параметра start, то получим строку, состоящую из символов, отсчитываемых с конца строки, число которых задано параметром start.
Сравнение строк
Упорядочение строк
int strcmp(string str1, string str2) - если две строки равны, то функция вернет значение 0; если в лексикографическом порядке строка str1 следует за (или больше чем) строкой str2, она вернет положительное число (и наоборот). Эта функция относится к числу чувствительных к регистру.
Функция strcasecmp() идентична рассмотренной выше функции и отличается от нее только тем, что нечувствительна к регистру. Функция strnatcmp() и ее нечувствительный к регистру аналог strnatsasecmp() сравнивают строки в "естественном порядке", который более привычен для человека. Например, функция strcmp() располагает строку "2" после строки "12", поскольку лексикографически первая трока больше второй. Данные же функции располагают их в обратном порядке.
Проверка длины строки
strlen() - возвращает длину строки. Например, strlen("desert") вернет значение 6.
Сопоставление и замена подстрок с помощью строковых функций
Поиск строк в строках
string strstr(string haystack, string needle) - используется для поиска соответствующей строки или символа внутри более длинной строки. Данная функция полностью совпадает по возможностям с strchr() (в отличии от аналогичной функции в языке С). Если строка needle будет найдена в строке haystack, функция возвращает часть строки haystack, начинающуюся со строки needle; в противном случае она возвращает значение false. Если строка needle встречается более одного раза, возвращаемая строка будет начинаться с первого вхождения строки needle.
stristr() - идентична предыдущей функции, но в отличии от нее, не чувствительна к регистру. Также существует функция strrchr(), которая также идентична strstr(), но возвращает часть стоки haystack, начиная с последнего вхождения строки needle.
Определение позиции подстроки
Функции strpos() и strrpos() действуют аналогично функции strstr() и отличаются от нее только тем, что вместо подстроки возвращают числовую позицию строки needle внутри строки haystack.
Функция strrpos() возвращает позицию последнего вхождения строки needle в строке haystack, в отличии от strpos(), которая возвращает позицию первого вхождения. Важно: strrpos() работает только с односимвольной строкой (если передать ей многосимвольную строку в параметре needle, то она будет использовать первый символ переданной строки). Если needle не содержится в haystack, данные функции возвращают false. Иногда это является источником проблем, так как в таком слаботипизированном языке, как PHP, значение false эквивалентно 0, т.е., первому символу в строке. Избежать этой проблемы можно, воспользовавшись операцией === для проверки возвращаемых значений:
if (strpos($str, "p") === false) {...}
Замена подстрок
mixed str_replace(mixed needle, mixed new_needle, mixed haystack) - замещает все экземпляры строки needle в строке haystack на строку new_needle. Интересная особенность данной функции - можно передать все параметры как массивы, благодаря чему интеллектуальный уровень этой функции заметно возрастает. Можно задать массив слов, подлежащих замене, и массив слов, на которые, соответственно, будут заменены слова первого массива, а также массив строк, к которому эти замены будут применены. Рассматриваемая функция вернет массив пересмотренных строк. Например, можно использовать ее для цензурирования определенных терминов в приложении дискуссионного форума
string substr_replace(string str, string repl, int start[, int length]) - данная функция замещает часть строки str строкой repl. Какую именно часть - зависит от остальных параметров. Параметр start задает смещение, с учетом которого начинается замена. Если оно равно 0 или положительно, то смещение определяется относительно начала строки, если же оно отрицательно, то смещение определяется относительно конца строки. Параметр length (необязательный) задает позицию, в которой PHP прекращает замену. Если это значение не указано, замена производится с позиции, определенной параметром start, и до конца строки. Нулевое значение данного параметра означает, что строка замены будет вставлена в строку без перезаписи существующей строки. Положительное значение означает количество символов, которые должны быть заменены новой строкой. Отрицательное представляет собой позицию относительно конца строки, начиная с которой замена символов прекращается.
Рекомендуем почитать