2

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

4

2 回答 2

2

您可以自己转换为字符串

(string)$find

随意添加任何对您有意义的检查,因为盲目施法不是一个好主意:

$find = true;
var_dump((string)$find);
string(1) "1"
于 2018-08-22T11:06:45.263 回答
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);
    }
}
于 2018-08-22T11:09:16.043 回答