От автора: честно признаюсь, что завидую соседу! Вчера зашел к нему в гараж, а у него там столько ключей и отверток! Все по полочкам развешаны, по размерам; ярко блестят хромом в свете светодиодных ламп. Ну, прям как набор инструментов, с помощью которых происходит PHP поиск в строке.
Что такое строки
Прежде, чем окунаться в данную тему «по уши», сразу предупреждаю, что будет немного нудно. Честно говоря, я сам могу заскучать при написании этого материала. Так что сразу прошу меня простить, если начну дурачиться :).
Теперь разберемся, что собой представляют строки. Точнее, как к ним «относится» PHP. В данном языке строки представляют собой массивы, состоящие из набора символов. Так это или нет, узнаем на практике по ходу рассмотрения примеров.
Ладно, хватит болтовни! Приступим к изучению этого важного материала. Кстати, если тема важная, то обязательно скучная почему-то :).
Строка в строке
Это уже не программирование, а матрешка какая-то получается! Так и есть: любой числовой или символьный массив можно разбить на несколько частей. Рассмотрим, как происходит в PHP поиск заданной подстроки в строке.
Для этого используем функцию, название которой звучит в тему – strstr(). В качестве аргументов она принимает основную строку, подстроку и необязательный параметр before_needle, который имеет тип bool. Если установить его в true, тогда функция вернет часть подстроки слева от искомой, но без нее:
1 2 3 4 5 |
<?php $str = '123456789 0 987654321'; $str2 = strstr($str, '0', true); echo $str2; ?> |
Результат выполнения:
Если не указывать before_needle, тогда strstr() вернет часть строки, которая начинается с указанной. Например:
1 2 3 4 5 |
<?php $str= '123456789 0 987654321'; $str1=strstr($str, '0'); echo $str1; ?> |
Строка может состоять не только из нескольких слов, но и даже из одного символа. Эта особенность в совокупности с рассматриваемой функцией широко применяется на практике. Например, для «обрезки» пользовательских данных:
1 2 3 4 5 |
<?php $str= 'superman@mail.com'; $str1=Фу($str,'@',true); echo $str1; ?> |
Таким образом, с помощью PHP поиска символа в заданной строке мы «вынули» логин пользователя из адреса его почтового ящика.
Другие варианты
Функция strstr() является «регистрочувствительной». Что не всегда уместно, особенно для обработки данных, вводимых пользователями в различные формы. Но в PHP можно всегда найти альтернативный вариант.
stristr() в отличие от своего «собрата» регистронезависима. Проверим действие обеих функций на практике. Используем для этого Василия Сидоровича Разгильдяева. Вы его не узнаете? Это же двоюродный брат Василия Пупкина :). Но давайте вернемся к нашим функциям и осуществим поиск слова в строке PHP с помощью каждой из них. При этом мы будем намеренно использовать различные регистры букв в подстроке (искомой) и строке:
1 2 3 4 5 6 7 8 |
<?php $string = 'Hello, WORLD!'; if(stristr($string, 'world') === FALSE) { echo "Мир не найден!"; } else echo stristr($string, 'world'); ?> |
Теперь испробуем функцию strstr():
1 2 3 4 5 6 7 8 |
<?php $string = 'Hello, WORLD!'; if(strstr($string, 'world') === FALSE) { echo "Мир не найден!"; } else echo strstr($string, 'world'); ?> |
Как видим, данная функция более капризная, и использовать ее в PHP для поиска текста в строке не всегда удобно.
Позиция искомого
Но существуют и другие элементы языка, которые с успехом могут справиться с данной задачей. Вдобавок некоторые из них обладают и другими полезными «талантами». Например, возвращают позицию вхождения искомой строки.
1 2 3 4 5 6 7 8 |
<?php $string = 'Hello, WORLD!'; if(strpos($string, 'world') === FALSE) { echo "Мир не найден!"; } else echo $position=strpos($string, 'world'); ?> |
Упс! Извиняюсь за неточность. Кажется, strops() также страдает «регистрозависимостью», потому что искомый мир опять не найден. Надеюсь, для этого «недуга» найдется лекарство, и мы сможем с помощью PHP поискать вхождения в строке.
И я нашел такое лекарство! Это функция stripos(). Давайте сразу проверим, обладает ли она «иммунитетом». А то опять прошляпим :).
1 2 3 4 5 6 7 8 |
<?php $string = 'Hello, WORLD!'; if(stripos($string, 'world') === FALSE) { echo "Мир не найден!"; } else echo stripos($string, 'world'); ?> |
Все, скукотища на сегодня достаточно! Если вы думаете, что это скучная тема, то вы ошибаетесь. Мы с вами еще не дошли до PHP поиска в строке с помощью регулярных выражений – вот где полный «капут». Но этот ужас я припасу на следующий Хэллоуин :). До следующего занятия!