PHP Tutorial - PHP strpos() Function






Definition

The strpos() function, and its case-insensitive sibling, stripos(), searches for a substring, find the position of the first occurrence of a substring in a string.

Syntax

PHP strpos() Function has the following syntax.

int strpos ( string haystack, mixed needle [, int offset] )

Parameter

  • haystack - The string to search in.
  • needle - If needle is not a string, it is converted to an integer and applied as the ordinal value of a character.
  • offset - If specified, search will start this number of characters counted from the beginning of the string. Unlike strrpos() and strripos(), the offset cannot be negative.




Return

PHP strpos() Function returns the position of where the needle exists relative to the beginning of the haystack string.

PHP strpos() Function returns FALSE if the needle was not found.

String positions start at 0, and not 1.

This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Use the === operator for testing the return value of this function.

Example 1

What will strrpos() return in case of not found

<?PHP
$myString = "Hello, world!"; 
echo strpos( $myString, "wor" ); // Displays '7' 
echo "\n";
echo strpos( $myString, "xyz" ); // Displays '' (false)   
?>

The code above generates the following result.





Example 2

<?PHP
$string = "This is a test from java2s.xom"; 
print strpos($string, "s") . "\n"; 
?>

PHP considers the first letter of a string to be index 0.

You can specify whole words in the second parameter. For example,

<?PHP
$string = "This is a test from java2s.xom"; 
print strpos($string,  "test") ;
?>

If the substring sent in parameter two is not found, strpos() will return false as opposed to -1.

This is very important, as shown in this script:

<?PHP
$string = "This is a strpos() test"; 
$pos = strpos($string, "This"); 
if ($pos == false) { 
        print "Not found\n"; 
} else { 
        print "Found!\n"; 
} 
?>

That will output "Not found". In the code above strpos() returns 0. However, PHP considers 0 to be the same value as false.

If we change if statement to use === rather than ==, PHP will check the value of 0 and false and find they match (both false), then check the types of 0 and false, and find that they do not match-the former is an integer, and the latter is a boolean. So, the corrected version of the script is this:

<?PHP
$string = "This is a strpos() test"; 
$pos = strpos($string, "This"); 
if ($pos === false) { 
        print "Not found\n"; 
} else { 
       print "Found!\n"; 
} 
?>

The third parameter to strpos() sets where to start searching from. For example:

<?PHP
$string = "This is a strpos() test"; 
$pos = strpos($string, "i", 3); 
if ($pos === false) { 
    print "Not found\n"; 
} else { 
    print "Found at $pos!\n"; 
} 
?>