Манипулирование строками

Форматирование строк 

Часто строки, вводимые пользователем, приходится очищать от служебных символов, прежде чем эти строки можно будет использовать по назначению. Также, если предполагается сравнение данной строки с другими или хранение ее в базе, следует использовать следующие функции. 

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, и до конца строки. Нулевое значение данного параметра означает, что строка замены будет вставлена в строку без перезаписи существующей строки. Положительное значение означает количество символов, которые должны быть заменены новой строкой. Отрицательное представляет собой позицию относительно конца строки, начиная с которой замена символов прекращается.




Рекомендуем почитать

 

Добавить комментарий


Ваше имя:


Комментарий:


Введите: Картинка