在PHP中,要找出在另一个字符串中出现文本字符串的索引偏移量,可使用strpos()
。
strstr()
函数有两个参数:
- 要搜索的字符串
- 要查找的搜索文本。
如果找到字符串,strpos()
将返回字符串中文本的第一个字符的索引。
如果找不到字符串,strpos()
返回false
:
<?php
$myString = "Hello, world!";
echo strpos( $myString, "wor" ); // 显示 '7'
echo strpos( $myString, "xyz" ); // 显示 '(false)
?>
当搜索到的文本出现在字符串的开头时,strpos()
返回0
。如果不注意,很容易将误认为它的返回值是false
。
例如,以下代码将错误地显示“Not found”:
<?php
$myString = "Hello, world!";
if ( !strpos( $myString, "Hel" ) ) echo "Not found";
?>
执行上面示例代码,得到以下结果:
Not found
要明确测试错误的返回值。以下代码正常工作:
示例代码
<?php
$myString = "Hello, world!";
if ( strpos( $myString, "Hel" ) === false ) echo "Not found";
?>
strpos()
可使用可选的第三个参数:字符串中的索引位置以开始搜索。如下示例:
<?php
$myString = "Hello, world!";
echo strpos( $myString, "o" ) . " \n"; // 显示 '4'
echo strpos( $myString, "o", 5 ) . " \n"; // 显示 '8'
?>
执行上面示例代码,得到以下结果:
4
8
可以使用第三个参数查找字符串中所有出现的搜索文本:
<?php
$myString = "Hello, world!";
$pos = 0;//
while ( ( $pos = strpos( $myString, "l", $pos ) ) !== false ) {
echo "The letter'l'was found at position: $pos \n ";
$pos++;
}
?>
执行上面示例代码,得到以下结果:
The letter'l'was found at position: 2
The letter'l'was found at position: 3
The letter'l'was found at position: 10
strpos()
有一个相类似函数strrpos()
,它们基本上功能相同; 唯一的区别是strrpos()
找到字符串中的最后一个匹配,而不是第一个匹配:
<?php
$myString = "Hello, world!";
echo strpos( $myString, "o" ) . " \n "; // 显示'4'
echo strrpos( $myString, "o" ) . " \n "; // 显示'8'
?>
执行上面示例代码,得到以下结果:
4
8
使用strpos()
,可以传递一个可选的第三个参数,指示从字符串的开始搜索的索引位置。如果此索引位置为负,则strrpos()
从字符串末尾多个字符开始搜索。