PHP 用strpos搜索子字符串
示例
strpos可以理解为第一次出现针之前在干草堆中的字节数。
var_dump(strpos("haystack", "hay")); //整数 var_dump(strpos("haystack", "stack")); //整数(3) var_dump(strpos("haystack", "stackoverflow"); //布尔值(false)
检查子串是否存在
在检查TRUE或FALSE时要小心,因为如果返回索引0,则if语句会将其视为FALSE。
$pos = strpos("abcd", "a"); //$pos=0; $pos2 = strpos("abcd", "e"); //$pos2=假; //检查针头的错误示例。 if($pos) { //0与TRUE不匹配。 echo "1. I found your string\n"; } else { echo "1. I did not found your string\n"; } //检查是否发现针的工作示例。 if($pos !== FALSE) { echo "2. I found your string\n"; } else { echo "2. I did not found your string\n"; } //检查是否找不到针 if($pos2 === FALSE) { echo "3. I did not found your string\n"; } else { echo "3. I found your string\n"; }
整个示例的输出:
1. I did not found your string 2. I found your string 3. I did not found your string
从偏移量开始搜索
//使用偏移量,我们可以搜索忽略偏移量之前的任何内容 $needle = "Hello"; $haystack = "Hello world! Hello World"; $pos = strpos($haystack, $needle, 1); //$pos=13,而不是0
获取所有出现的子串
$haystack = "a baby, a cat, a donkey, a fish"; $needle = "a "; $offsets = []; //从字符串的开头开始搜索 for($offset = 0; //如果我们的偏移量超出了 //字符串,请勿搜索了。 //如果未设置此条件,将发出警告 //如果$haystack以$needle结尾则被触发 //$needle只有一个字节长。 $offset < strlen($haystack); ){ $pos = strpos($haystack, $needle, $offset); //我们没有子字符串了 if($pos === false) break; $offsets[] = $pos; //您可能要添加strlen($needle), // depending on whether you want to count "aaa" // as 1 or 2 "aa"s. $offset = $pos + 1; } echo json_encode($offsets); //[0,8,15,25]