我创建了一个通用函数,用于检查给定字符串是否存在于字符串中。除非我遇到此问题,否则该功能工作正常。问题是如果我将find和string都传递给3即int,那么它将返回false。我相信它应该返回true。我在php官方网站上阅读后发现:
如果needle不是字符串,则将其转换为整数并用作字符的序数值。
对此有什么解决办法吗?
我的功能如下:
private static function compareValue($string, $find) {
if (strpos($find, '!') === 0) {
//removing first ! for comparison
$find = substr($find, 1);
//comparison will be like not equals to
return !(stripos($string, $find) !== false);
} else {
return (stripos($string, $find) !== false);
}
}
编辑
如果是像self::compareValue(3,3)
这样的调用函数,则它应该返回true而不是false。
答案 0 :(得分:2)
您可以cast to string自己:
(string)$find
请随意添加任何对您有意义的支票,因为盲目铸造不是一个好主意:
$find = true;
var_dump((string)$find);
string(1) "1"
答案 1 :(得分:2)
如果我没记错的话,stripos是用于字符串的,所以您应该将整数转换为字符串。 请注意,您只需要在else语句中强制转换它,就好像它在第一个条件下已经是字符串一样。
private static function compareValue($string, $find) {
if (strpos($find, '!') === 0) {
//removing first ! for comparison
$find = substr($find, 1);
//comparison will be like not equals to
return !(stripos($string, $find) !== false);
} else {
return (stripos($string, (string)$find) !== false);
}
}