Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по сетям ЭВМ4.doc
Скачиваний:
23
Добавлен:
02.05.2014
Размер:
99.84 Кб
Скачать

Сравнение строк

До сих пор мы использовали только операцию == для сравнения двух строк на предмет их равенства. В PHP можно выполнять и более сложные операции сравнения. Их можно разделить на две категории: частичное совпадение и все прочие. Вначале рассмотрим прочие функции, а затем функции установления частичного совпадения, которые потребуются для дальнейшей разработки нашей формы.

Упорядочение строк

Данные функции полезны при сортировке данных. Прототип функции strcmp() имеет вид:

int strcmp(string str1, string str2);

Если две строки верны, то функция вернет 0. Эта функция чувствительна к регистру.

Функция strcasecmp(). Данная функция идентична предыдущей за исключение того, что она не чувствительна к регистру.

Функция strnatcmp() и ее нечувствительный к регистру аналог strnatcasecmp() сравнивают строки в соответствии с естественным упорядочением, которое более привычно для человека. Например, strcmp() расположила бы строку “2” после строки “12”, поскольку лексикографически она больше. Функция strnatcmp() расположила бы эти строки в обратном порядке.

Проверка длины строк

Длину строки можно проверить с помощью функции strlen(). Это можно задействовать при проверке правильности вводимых данных.

Сопоставление и замена подстрок с помощью строковых функций

Часто нужно проверить наличие конкретной подстроки в более длинной строке. Обычно это частичное сопоставление более полезно, нежели проверка строк на предмет равенства. В нашем примере требуется выполнить поиск на предмет наличия ключевых фраз в отзыве пользователя и отправить сообщение электронной почты в соответствующее подразделение. Можно было бы использовать функции explode() и strtok() для получения отдельных слов сообщения, а затем сравнить их, используя операцию == или функцию strcmp().

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

Поиск строк в строках

Функция strstr() используется для поиска строки внутри строки, в том числе для поиска строки, состоящей только из одного символа. Ее прототип:

string strstr(string haystack, string needle);

В качестве параметра передается строка haystack, в которой нужно выполнить поиск, и строка needle, которую требуется найти. В случае обнаружения полного соответствия со строкой needle функция возвращает часть строки haystack, начинающуюся со строки needle, в противном случае она возвращает false. Если строка needle встречается более одного раза, возвращаемая строка будет начинаться с первого вхождения данной строки.

Например

$toaddress = "feedback@bobsdomain.com";

if (strstr($feedback, "shop"))

$toaddress = "retail@bobsdomain.com";

else if (strstr($feedback, "delivery"))

$toaddress = "fulfilment@bobsdomain.com";

else if (strstr($feedback, "bill"))

$toaddress = "accounts@bobsdomain.com";

Существует два варианта функции strstr(). Первый – функция stristr(), которая практически идентична предыдущей, но не чувствительна к регистру. Второй вариант – функция strrchr(), которая будет возвращать часть строки haystack, начиная с последнего вхождения строки needle.

Определение позиции подстроки

Функция strpos() и strrpos() действуют аналогично функции strstr() за исключением того, что вместо подстроки они возвращают числовую позицию строки needle. Функция strpos() имеет следующий прототип:

int strpos(string haystack, string needle, int [offset]);

Целочисленное возвращаемое значение представляет первое вхождение строки needle. Необязательный параметр используется для указания позиции внутри строки haystack, с которой должен начинаться поиск.

Функция strrpos() будет возвращать позицию последнего вхождения строки needle. К тому же она работает только с одно-символьной строкой needle. В любом из этих случаев, если needle не является строкой, то будет возвращено значение false. Это может порождать проблемы, поскольку в слабо типизированном языке наподобие PHP значение false эквивалентно 0. Во избежание этой проблемы используют операцию ===:

$result = strpos($test, “H”);

if ($result === false)

echo “Not found”

else

echo “Fount at position 0”;