strrpos
(PHP 4, PHP 5, PHP 7, PHP 8)
Find the position of the last occurrence of a substring in a string
Description
Find the numeric position of the last occurrence of needle in the haystack string.
Parameters
haystackThe string to search in.
needleThe string to search for.
Non-string
offsetIf zero or positive, the search is performed left to right skipping the first
offsetbytes of thehaystack.If negative, the search starts
offsetbytes from the right instead of from the beginning ofhaystack. The search is performed right to left, searching for the first occurrence ofneedlefrom the selected byte.NoteThis is effectively looking for the last occurrence of
needleat or before the lastoffsetbytes.
Return Values
Returns the position where the needle exists relative to the beginning of the haystack string (independent of search direction or offset).
String positions start at 0, and not 1.
Returns false if the needle was not found.
Falseproblem
Errors/Exceptions
- If
offsetis greater than the length ofhaystack, aValueErrorwill be thrown.
Changelog
| Version | Description |
|---|---|
| 8.0.0 | Passing an Integer as needle is no longer supported. |
| 7.3.0 | Passing an Integer as needle has been deprecated. |
Examples
Checking if a needle is in the haystack
It is easy to mistake the return values for "character found at position 0" and "character not found". Here's how to detect the difference:
<?php
$mystring = 'Elephpant';
$pos = strrpos($mystring, "b");
if ($pos === false) { // note: three equal signs
// not found...
}
?>Searching with offsets
<?php
$foo = "0123456789a123456789b123456789c";
// Looking for '0' from the 0th byte (from the beginning)
var_dump(strrpos($foo, '0', 0));
// Looking for '0' from the 1st byte (after byte "0")
var_dump(strrpos($foo, '0', 1));
// Looking for '7' from the 21th byte (after byte 20)
var_dump(strrpos($foo, '7', 20));
// Looking for '7' from the 29th byte (after byte 28)
var_dump(strrpos($foo, '7', 28));
// Looking for '7' right to left from the 5th byte from the end
var_dump(strrpos($foo, '7', -5));
// Looking for 'c' right to left from the 2nd byte from the end
var_dump(strrpos($foo, 'c', -2));
// Looking for '9c' right to left from the 2nd byte from the end
var_dump(strrpos($foo, '9c', -2));
?>The above example will output:
int(0)
bool(false)
int(27)
bool(false)
int(17)
bool(false)
int(29)