stripos return false 数字比较
stripos return false on number comparison
我创建了一个通用函数来检查给定的字符串是否存在于字符串中。除非我遇到这个问题,否则该功能工作正常。问题是如果我将 find 和 string 都传递给 3,即 int 那么它是 returning false。我相信它应该 return 正确。我在 php 官方网站上阅读并发现了这个:
If needle is not a string, it is converted to an integer and applied as the ordinal value of a character.
有什么解决办法吗
我的函数如下:
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)
那么它应该 return true 而不是 false。
您可以cast to string自己:
(string)$find
随意添加任何对您有意义的检查,因为盲目投射不是一个好主意:
$find = true;
var_dump((string)$find);
string(1) "1"
如果我没记错的话,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);
}
}
我创建了一个通用函数来检查给定的字符串是否存在于字符串中。除非我遇到这个问题,否则该功能工作正常。问题是如果我将 find 和 string 都传递给 3,即 int 那么它是 returning false。我相信它应该 return 正确。我在 php 官方网站上阅读并发现了这个:
If needle is not a string, it is converted to an integer and applied as the ordinal value of a character.
有什么解决办法吗
我的函数如下:
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)
那么它应该 return true 而不是 false。
您可以cast to string自己:
(string)$find
随意添加任何对您有意义的检查,因为盲目投射不是一个好主意:
$find = true;
var_dump((string)$find);
string(1) "1"
如果我没记错的话,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);
}
}