Stripos在数字比较中返回false

时间:2018-08-22 11:00:51

标签: php string-comparison stripos

我创建了一个通用函数,用于检查给定字符串是否存在于字符串中。除非我遇到此问题,否则该功能工作正常。问题是如果我将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。

2 个答案:

答案 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);
    }
}