Функция strpos() в PHP - одна из самых используемых при обработке данных строкового типа. Она позволяет определить позицию, начиная с которой в исходную строку входит искомая подстрока. При этом для получения адекватного результата следует учитывать ряд тонкостей.
Входные и выходные параметры
В общем виде синтаксис функции PHP strpos() выглядит следующим образом:
mixed strpos (string $string , mixed $substring[, int $offset = 0 ] )
На вход принимаются два обязательных аргумента и один необязательный:
- Исходная строка - $string, в которой и будет произведен поиск.
- Искомая подстрока - $substring. Данный параметр имеет тип mixed. Это означает, что кроме строкового типа данных, функция может принять любой другой. В этом случае аргумент будет преобразован в целое число и обработан, как символьный код.
- Необязательный параметр, определяющий смещение - $offset. По умолчанию поиск производится с самого начала строки $string, а смещение равно 0. Если определить отрицательное смещение, оно будет отсчитываться с конца строки.
Вам будет интересно:Box-sizing в CSS: вычисление размеров блока
Функция PHP strpos() возвращает позицию, начиная с которой $substring входит в $string. Если таких вхождений несколько, будет возвращена только позиция первого из них.
Если совпадений нет, на выходе будет булево значение false.
Особенности работы
При поиске позиции подстроки важно учитывать, что нумерация символов начинается с нуля. Следовательно, 0 - одно из корректных возвращаемых значений.
При нестрогом сравнении 0 приводится к логическому типу, превращается в false и может быть воспринят как отсутствие вхождений. Поэтому очень важно использовать строгое равенство (===), учитывающее тип сравниваемых величин.
Кроме того, strpos() - пример PHP-функции, зависимой от регистра символов.
Примеры использования
Пример 1. Простое вхождение. Требуется найти позицию, на которой подстрока key входит в строку monkeys.
$string = 'monkeys'; $substring = 'key';
$result = strpos($string, $substring);
// Значение $result - 3
?>
Пример 2. Отсутствие вхождений. Если изменить искомую строку на KEY, функция PHP strpos() не обнаружит совпадений, так как является регистрозависимой. Результатом будет булево значение false.
$string = 'monkeys'; $substring = 'KEY';
$result = strpos($string, $substring); echo($result === false);
?>
Пример 3. Вхождение на нулевой позиции. Важно использовать строгое равенство, проверяя результат работы функции, иначе можно получить некорректный результат.
$string = 'lifehack'; $substring = 'life';
$result = strpos($string, $substring);
if (!$result) { echo 'Нет вхождений'; }
if ($result == false) { echo 'Нет вхождений'; }
if ($result === false) { echo 'Нет вхождений'; } ?>
Первые две проверки определят отсутствие вхождений, несмотря на то, что подстрока life входит в исходную строку lifehack.
Пример 4. Смещение начальной позиции с помощью параметра $offset.
$string = 'love-and-love'; $substring = 'love';
$result1 = strpos($string, $substring); $result2 = strpos($string, $substring, 3);
echo $result1; // 0 echo $result2; // 9 ?>
После установки смещения, равного 3, поиск начинается с символа "e".
Похожие функции
Для определения позиции подстроки в PHP существуют и другие функции, отличающиеся от strpos():
- stripos() - не учитывает регистр символов;
- strrpos() - определяет последнее вхождение;
- strripos() - ищет последнее вхождение и не учитывает регистр.