strripos
Ищет позицию последнего вхождения подстроки needle в строку haystack .
В отличие от strrpos() , strripos() не учитывает регистр символов.
Список параметров
Строка, в которой производится поиск.
До PHP 8.0.0, если параметр needle не является строкой, он преобразуется в целое число и трактуется как код символа. Это поведение устарело с PHP 7.3.0, и полагаться на него крайне не рекомендуется. В зависимости от предполагаемого поведения, параметр needle должен быть либо явно приведён к строке, либо должен быть выполнен явный вызов chr() .
Если равно или больше ноля, то поиск будет идти слева направо и, при этом, будут пропущены первые offset байт строки haystack .
Если меньше ноля, то поиск будет идти справа налево. При этом будут отброшены offset байт с конца haystack и найдено первое найденное вхождение needle .
Замечание:
Фактически это будет последнее вхождение needle без учёта offset последних байт.
Возвращаемые значения
Возвращает номер позиции последнего вхождения needle относительно начала строки haystack (независимо от направления поиска и смещения (offset)).
Замечание: Позиция в строке строки отсчитывается от 0, а не от 1.
Возвращает false , если искомая строка не найдена.
Эта функция может возвращать как логическое значение false , так и значение не типа boolean, которое приводится к false . За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.
Список изменений
Версия | Описание |
---|---|
8.2.0 | Преобразование регистра больше не зависит от локали, установленной с помощью функции setlocale() . Будут преобразованы только символы ASCII. Байты не ASCII-кодировке будут сравниваться по значению байта. |
8.0.0 | Передача целого числа ( int ) в needle больше не поддерживается. |
7.3.0 | Передача целого числа ( int ) в needle объявлена устаревшей. |
Примеры
Пример #1 Пример использования strripos()
$pos = strripos ( $haystack , $needle );
if ( $pos === false ) echo «К сожалению, ( $needle ) не найдена в ( $haystack )» ;
> else echo «Поздравляем!\n» ;
echo «Последнее вхождение ( $needle ) найдено в ( $haystack ) в позиции ( $pos )» ;
>
?>
Результат выполнения данного примера:
Поздравляем! Последнее вхождение (aB) найдено в (ababcd) в позиции (2)
Смотрите также
- strpos() — Возвращает позицию первого вхождения подстроки
- stripos() — Возвращает позицию первого вхождения подстроки без учёта регистра
- strrpos() — Возвращает позицию последнего вхождения подстроки в строке
- strrchr() — Находит последнее вхождение символа в строке
- stristr() — Регистронезависимый вариант функции strstr
- substr() — Возвращает подстроку
User Contributed Notes 7 notes
Simple way to implement this function in PHP 4
if ( function_exists ( ‘strripos’ ) == false ) function strripos ( $haystack , $needle ) return strlen ( $haystack ) — strpos ( strrev ( $haystack ), $needle );
>
>
Suppose you just need a stripos function working backwards expecting that strripos does this job, you better use the following code of a custom function named strbipos:
function strbipos ( $haystack = «» , $needle = «» , $offset = 0 ) // Search backwards in $haystack for $needle starting from $offset and return the position found or false
$len = strlen ( $haystack );
$pos = stripos ( strrev ( $haystack ), strrev ( $needle ), $len — $offset — 1 );
return ( ( $pos === false ) ? false : $len — strlen ( $needle ) — $pos );
>
// Test
$body = «01234Xy7890XYz456xy90» ;
$str = «xY» ;
$len = strlen ( $body );
echo «TEST POSITIVE offset VALUES IN strbipos
» ;
for ( $i = 0 ; $i < $len ; $i ++) echo "Search in [ $body ] for [ $str ] starting from offset [ $i ]: [" . strbipos ( $body , $str , $i ) . "]» ;
>
?>
Note that this function does exactly what it says and its results are different comparing to PHP 5 strripos function.
Generally speaking, linear searches are from start to end, not end to start — which makes sense from a human perspective. If you need to find strings in a string backwards, reverse your haystack and needle rather than manually chopping it up.
OK, I guess this will be the final function implementation for PHP 4.x versions ( my previous posts are invalid )
if(! function_exists ( «stripos» )) function stripos ( $str , $needle , $offset = 0 ) return strpos ( strtolower ( $str ), strtolower ( $needle ), $offset );
> /* endfunction stripos */
> /* endfunction exists stripos */
if(! function_exists ( «strripos» )) function strripos ( $haystack , $needle , $offset = 0 ) if( ! is_string ( $needle ) ) $needle = chr ( intval ( $needle ) );
if( $offset < 0 )$temp_cut = strrev ( substr ( $haystack , 0 , abs ( $offset ) ) );
>
else $temp_cut = strrev ( substr ( $haystack , 0 , max ( ( strlen ( $haystack ) — $offset ), 0 ) ) );
>
if( ( $found = stripos ( $temp_cut , strrev ( $needle ) ) ) === FALSE )return FALSE ;
$pos = ( strlen ( $haystack ) — ( $found + $offset + strlen ( $needle ) ) );
return $pos ;
> /* endfunction strripos */
> /* endfunction exists strripos */
?>
I think you shouldn’t underestimate the length of $needle in the search of THE FIRST POSITION of it’s last occurrence in the string. I improved the posted function, with added support for offset. I think this is an exact copy of the real function:
if(! function_exists ( «strripos» )) function strripos ( $haystack , $needle , $offset = 0 ) if( $offset < 0 )$temp_cut = strrev ( substr ( $haystack , 0 , abs ( $offset ) ) );
>
else $temp_cut = strrev ( substr ( $haystack , $offset ) );
>
$pos = strlen ( $haystack ) — ( strpos ( $temp_cut , strrev ( $needle )) + $offset + strlen ( $needle ));
if ( $pos == strlen ( $haystack )) < $pos = 0 ; >
return $pos ;
> /* endfunction strripos*/
> /* endfunction exists strripos*/
?>
Sorry, I made that last post a bit prematurely. One more thing wrong with the simple php4 version is that it breaks if the string is not found. It should actually look like this:
if ( function_exists ( ‘strripos’ ) == false ) function strripos ( $haystack , $needle ) $pos = strlen ( $haystack ) — strpos ( strrev ( $haystack ), strrev ( $needle ));
if ( $pos == strlen ( $haystack )) < $pos = 0 ; >
return $pos ;
>
>
?>
Note, we now check to see if the $needle was found, and if it isn’t, we return 0.
strripos() has very strange behaviour when you provide search position. For some reason it searches forward from the given position, instead of searching backward, that is more logical.
For example if you want to find instanse of $what, previous to the last, strripos($where, $what, $last_what_pos-1) will not wark as expected. It will return $last_what_pos again and again. And that has no sence at all.
To prevent this, I just used $prev_last_what_pos = strripos(substr($where,0,$last_what_pos), $what);
strrpos
Ищет позицию последнего вхождения подстроки needle в строку haystack .
Список параметров
Строка, в которой производится поиск.
Если needle не является строкой, то он приводится к целому и трактуется как код символа.
Если указан, то поиск начнется с данного количества символов с начала строки. Если передано отрицательное значение, поиск начнется с указанного количества символов от конца строки, но по прежнему будет производится поиск последнего вхождения.
Возвращаемые значения
Возвращает номер позиции последнего вхождения needle относительно начала строки haystack (независимо от направления поиска и смещения (offset)). Также обратите внимание на то, что позиция строки отсчитывается от 0, а не от 1.
Возвращает FALSE , если искомая строка не найдена.
Список изменений
Версия | Описание |
---|---|
5.0.0 | Параметр needle может быть строкой из более чем одного символа. |
Примеры
Пример #1 Проверка существования искомой строки
Легко ошибиться и перепутать возвращаемые значения в случаях «символ найден в нулевой позиции» и «символ не найден». Вот так можно узнать разницу:
Пример #2 Поиск со смещением
var_dump ( strrpos ( $foo , ‘7’ , — 5 )); // Поиск происходит в обратном направлении и
// начинается с пятой позиции с конца. Результат: int(17)
var_dump ( strrpos ( $foo , ‘7’ , 20 )); // Начинает поиск с 20 позиции в строке.
// Результат: int(27)
var_dump ( strrpos ( $foo , ‘7’ , 28 )); // Результат: bool(false)
?>
Смотрите также
- strpos() — Возвращает позицию первого вхождения подстроки
- stripos() — Возвращает позицию первого вхождения подстроки без учета регистра
- strripos() — Возвращает позицию последнего вхождения подстроки без учета регистра
- strrchr() — Находит последнее вхождение символа в строке
- substr() — Возвращает подстроку
strripos
Ищет позицию последнего вхождения подстроки needle в строку haystack .
В отличие от strrpos() , strripos() не учитывает регистр символов.
Список параметров
Строка, в которой производится поиск.
Если параметр needle не является строкой, то он будет преобразован к целому и обработан как код символа.
Если указан, то поиск начнется с данного количества символов с начала строки. Если передано отрицательное значение, поиск начнется с указанного количества символов от конца строки, но по прежнему будет производится поиск последнего вхождения.
Возвращаемые значения
Возвращает номер позиции последнего вхождения needle относительно начала строки haystack (независимо от направления поиска и смещения (offset)). Также обратите внимание на то, что позиция строки отсчитывается от 0, а не от 1.
Возвращает FALSE , если искомая строка не найдена.
Эта функция может возвращать как boolean FALSE , так и не-boolean значение, которое приводится к FALSE . За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.
Примеры
Пример #1 Пример использования strripos()
$pos = strripos ( $haystack , $needle );
if ( $pos === false ) echo «К сожалению, ( $needle ) не найдена в ( $haystack )» ;
> else echo «Поздравляем!\n» ;
echo «Последнее вхождение ( $needle ) найдено в ( $haystack ) в позиции ( $pos )» ;
>
?>
Результат выполнения данного примера:
Поздравляем! Последнее вхождение (aB) найдено в (ababcd) в позиции (2)
Смотрите также
- strpos() — Возвращает позицию первого вхождения подстроки
- stripos() — Возвращает позицию первого вхождения подстроки без учета регистра
- strrpos() — Возвращает позицию последнего вхождения подстроки в строке
- strrchr() — Находит последнее вхождение символа в строке
- stristr() — Регистронезависимый вариант функции strstr
- substr() — Возвращает подстроку