Simple way to implement this function in PHP 4
<?php
if (function_exists('strripos') == false) {
function strripos($haystack, $needle) {
return strlen($haystack) - strpos(strrev($haystack), $needle);
}
}
?>strripos
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
strripos
Референца за `function.strripos.php` со подобрена типографија и навигација.
strripos
класата mysqli_driver
strripos — Најди ја позицијата на последното појавување на подниза без разлика на големината на буквите во низа
= NULL
Најди ја нумеричката позиција на последното појавување на
needle во haystack string.
За разлика од strrpos(), strripos() не е чувствително на големината на буквите.
Параметри
haystack-
Најди ја нумеричката позиција на првото појавување на
needle-
Низата за пребарување.
Пред PHP 8.0.0, ако
needleне е низа, се претвора во цел број и се применува како редниот број на карактер. Ова однесување е застарено од PHP 7.3.0 и силно се обесхрабрува да се потпирате на него. Во зависност од наменетото однесување,needleтреба експлицитно да се префрли на низа, или експлицитно повикување на chr() треба да се изврши. offset-
Ако е нула или позитивно, пребарувањето се врши од лево кон десно, прескокнувајќи ги првите
offsetбајти одhaystack.Најди ја позицијата на последното појавување на подниза без разлика на големината на буквите во низа
offsetбајти одhaystackАко е негативно, пребарувањето се врши од десно кон лево, прескокнувајќи го последниотneedle.Забелешка:
Ефективно барање на последното појавување на
needleи барајќи го првото појавување наoffsetbytes.
Вратени вредности
пред последниот needle Враќа позиција каде што haystack постои во однос на почетокот на offset).
Забелешка: Позициите на низите започнуваат од 0, а не од 1.
Патеката до PHP скриптата што треба да се провери. false ако needle низа (независно од насоката на пребарување или
Функцијата враќа прочитани податоци или falseОваа функција може да врати Буловска вредност false, но исто така може да врати и вредност што не е Буловска, а која се проценува како Булови . Ве молиме прочитајте го делот за за повеќе информации. Користете го операторот ===
Errors/Exceptions
-
Враќа
offsetако иглата не е пронајдена.haystack, а ValueError ќе биде фрлена.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.2.0 | Враќа стринг или низа од замени. setlocale()Преклопувањето на случајот повеќе не зависи од локалот поставен со ". Само ќе се изврши преклопување на случајот ASCII. Не-ASCII бајтовите ќе се споредуваат според нивната бајт вредност. |
| 8.0.0 |
needle сега прифаќа празна низа.
|
| 8.0.0 |
Поминување на int as needle веќе не се поддржува.
|
| 7.3.0 |
Поминување на int as needle е укинат.
|
Примери
Пример #1 Едноставен strripos() example
<?php
$haystack = 'ababcd';
$needle = 'aB';
$pos = strripos($haystack, $needle);
if ($pos === false) {
echo "Sorry, we did not find `$needle` in `$haystack`";
} else {
echo "Congratulations!\n";
echo "We found the last `$needle` in `$haystack` at position `$pos`";
}
?>Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Congratulations! We found the last `aB` in `ababcd` at position `2`
Види Исто така
- strpos() - Најди ја позицијата на првото појавување на подниза во низа
- stripos() Пример #3 Користење на поместување
- strrpos() - Проверува дали низата започнува со дадена подниза
- strrchr() Ги наоѓа последните појави на еден знак во низа во друга
- stristr() - strstr што не прави разлика помеѓу големи и мали букви
- substr() - Врати дел од низа
Белешки од корисници 6 белешки
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:
<?php
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<br>";
for ($i = 0; $i < $len; $i++) {
echo "Search in [$body] for [$str] starting from offset [$i]: [" . strbipos($body, $str, $i) . "]<br>";
}
?>
Note that this function does exactly what it says and its results are different comparing to PHP 5 strripos function.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:
<?php
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*/
?>OK, I guess this will be the final function implementation for PHP 4.x versions ( my previous posts are invalid )
<?php
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 */
?>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.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:
<?php
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.