strpos——int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )
返回 needle 在 haystack 中首次出现的数字位置。如果 needle 不是一个字符串,那么它将被转换为整型并被视为字符的顺序值。可选的 offset 参数可以用来指定从 haystack 中的哪一个字符开始查找。返回的数字位置是相对于 haystack 的起始位置而言的。如果没找到 needle,strpos() 将返回布尔型的 FALSE 值。
strrpos——int strrpos ( string $haystack , string $needle [, int $offset = 0 ] )
返回字符串 haystack 中 needle 最后一次出现的数字位置。注意 PHP4 中,needle 只能为单个字符。如果 needle 被指定为一个字符串,那么将仅使用第一个字符。返回 needle 存在的位置。如果没有找到,返回 FALSE。
它们分别有两个不区分大小写的相似函数:stripos 和 strripos
上述两个函数使用的要点:
1、用全等来验证,即要用false===而不是false==
2、strpos的offset不能是负数,这和strrpos不同
3、strpos比strstr函数更快,更节省内存,官方建议如果你仅仅想确定 needle 是否存在于 haystack 中,请用strpos
实例:
<?php
$url = 'www.readmoon.com';
$http = 'http://';
if(false===strpos($url,$http))
// 因为http的位置为0,这里一定必须要用===(全等)来验证
{
echo $url = $http.$url;
}
$str = '<table id="nav"><tr><td>表格1</td></tr></table><table border="1" style="width: 920px;"><tr><td>表格2</td></tr></table>';
// 如果要去掉表格标签里面的样式和ID,就要用到strpos的第三个参数,从哪个位置开始查找
// 方法是循环找到 <table ,然后找到跟随其后的第一个 > ,替换期间的内容为空
$tstart = '<table';
$tablenum = substr_count($str,$tstart);
$tend = '>';
$tendpos = 0;
for($i=0;$i<$tablenum;$i++)
{
$tstartpos = strpos($str,$tstart,$tendpos);
if($tstartpos!==false)
{
$tendpos = strpos($str,$tend,$tstartpos);
$treplacelen = $tendpos - $tstartpos - strlen($tstart);
if($treplacelen>0)
{
$str = substr_replace($str,'',($tstartpos + strlen($tstart)),$treplacelen);
}
}
}
// offset的值可以为负数,那样将从后面开始查找,这个和substr有些类似
// 但是strpos的offset不能为负值,否则会出现Warning 同时返回false
$foo = "0123456789a123456789b123456789c";
var_dump(strpos($foo,'7')); // 结果: int(7)
var_dump(strrpos($foo,'7')); // 结果: int(27)
var_dump(strpos($foo, '7', -5)); // strpos 中的offset不能为负值,一段Warning 后返回bool(false)
var_dump(strrpos($foo, '7', -5)); // 从尾部第 5 个位置开始查找, 结果: int(17)
var_dump(strpos($foo, '7', 20)); // 从第 20 个位置开始查找,结果: int(27)
var_dump(strrpos($foo, '7', 20)); // 从第 20 个位置开始查找,结果: int(27)
var_dump(strpos($foo, '7', 28)); // 结果: bool(false)
var_dump(strrpos($foo, '7', 28)); // 结果: bool(false)
?>
近期评论