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