(PHP 4, PHP 5, PHP 7, PHP 8)
strpos — Находит позицию первого вхождения подстроки
Функция находит в строке haystack
позицию первого вхождения подстроки needle.
haystackСтрока, в которой выполняется поиск.
needleСтрока, которую требуется найти.
До PHP 8.0.0 нестроковый аргумент needle
преобразовывался в целое число и заменялся на символ с этим порядковым значением в однобайтовой таблице символов.
Начиная с PHP 7.3.0 передача нестроковых значений устарела и полагаться на него настоятельно не рекомендуют.
Перед вызовом функции нестроковый аргумент needle требовалось
либо приводить к строке, либо получать строковое значение символа функцией chr().
offsetПри установке параметра функция начнёт поиск с заданного количества символов с начала строки. При отрицательном значении функция отсчитывает позицию начала поиска с конца строки.
Функция возвращает позицию искомой подстроки относительно начала строки haystack
независимо от значения параметра offset.
Обратите также внимание, что позиция строки отсчитывается с 0, а не с 1.
Функция возвращает значение false, если не нашла строку.
Функция
возвращает как логическое значение false,
так и нелогическое значение, которое приводится к false.
Прочитайте раздел
«Логический тип»,
чтобы получить дополнительную информацию.
Используйте оператор ===
для проверки значения, которое возвращает функция.
| Версия | Описание |
|---|---|
| 8.0.0 |
Параметр needle теперь разрешает пустую строку.
|
| 8.0.0 |
Функция больше не поддерживает передачу целого числа (int) в параметр needle.
|
| 7.3.0 |
Передача целого числа (int) в параметр needle устарела.
|
| 7.1.0 |
Добавили поддержку отрицательных значений параметром offset.
|
Пример #1 Пример строго сравнения значений оператором ===
<?php
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
// Обратите внимание, что значения сравниваются оператором ===. Оператор == не будет работать
// как ожидается, поскольку позиция символа «a» — первого по счёту символа — равнялась 0.
if ($pos === false) {
echo "Функция не нашла подстроку «{$findme}» в строке «{$mystring}»";
} else {
echo "Функция нашла подстроку «{$findme}» в строке «{$mystring}»";
echo " в позиции $pos";
}
?>Пример #2 Пример проверки результата оператором !==
<?php
$mystring = 'abc';
$findme = 'a';
$pos = strpos($mystring, $findme);
// Оператором !== тоже проверяют результат поиска позиции подстроки. Оператор != не сработает
// как ожидается, поскольку позиция подстроки 'a' равна 0. Инструкция (0 != false) вычисляется
// как false, поскольку при нестрогом сравнении false неявно приводится к 0
if ($pos !== false) {
echo "Функция нашла подстроку «{$findme}» в строке «{$mystring}»";
echo " в позиции {$pos}";
} else {
echo "Функция не нашла подстроку «{$findme}» в строке «{$mystring}»";
}
?>Пример #3 Пример установки смещения
<?php
// Игнорируем символы до значения смещения, а затем находим символ
$newstring = 'abcdef abcdef';
$pos = strpos($newstring, 'a', 1); // Переменная $pos = 7, а не 0
echo $pos, PHP_EOL;
?>Замечание: Функция безопасна для обработки данных в двоичной форме.