这应该是非常简单的,但我似乎无法在任何地方找到解释如何做到这一点。
我在PHP中有一个字符串。该字符串可能包含在子字符串“:ERROR:”的某处。我需要找到它是否有该字符串。 strpos()
完全达到了这一点,直到今天,“:错误:”是字符串中的第一项,因此strpos()
返回0
,所以程序一直在运行,认为它有没错。
我不需要替换字符串,也不需要对它进行任何操作,我只需要一个简单的true/false
回答“确实:错误:字符串中是否存在?”
答案 0 :(得分:3)
strpos
会返回false
,因此请检查false
而不是隐含条件。
if(strpos($string, ':ERROR:') !== false) {
// Do something...
}
正如Anurag在评论中所说,使用这些函数时,最好进行严格的比较(===
而不是仅仅忽略运算符或使用==
),因为这是bug的常见来源特别是在PHP中,许多函数可以返回不同类型的值。
答案 1 :(得分:2)
strpos()
上的PHP手册:
此函数可能返回布尔值FALSE,但也可能返回一个非布尔值,其值为FALSE,例如0或“”。有关更多信息,请阅读有关布尔值的部分。使用===运算符测试此函数的返回值。
if (strpos($myString, ":ERROR:") !== FALSE) {
// Error!
}
答案 2 :(得分:1)
您还可以使用鲜为人知的strstr()
strpos()
不使用严格类型运算符进行检查的问题
答案 3 :(得分:0)
if(strpos($string, ':ERROR:') !== false){
//found ':ERROR:' in string
}
“[strpos()] [r]将位置变为整数。如果未找到needle,strpos()将返回布尔值FALSE。”
http://php.net/manual/en/function.strpos.php
如果位置为0,那么仅使用==或!=将评估0和false作为等效。所以使用===或!==来避免类型强制。