strpos 无法正常工作

Posted

技术标签:

【中文标题】strpos 无法正常工作【英文标题】:strpos not working properly 【发布时间】:2016-07-07 03:27:35 【问题描述】:

我正在制作一个网站,我们需要做的一件事是吸引用户的兴趣,向他们展示最好的内容。用户的兴趣存储在“兴趣”字段中的“用户”表中。

现在,文章被标记了不同的兴趣,并且显示了与用户兴趣相匹配的文章。文章保存在标记表中。所以我们得到所有文章的标签,然后选择用户的兴趣。如果在文章中找到兴趣,则代码回显 true,否则回显 false。

$select = "SELECT * from users where username='$username'";
$query = mysqli_query($dbc, $select) or die(mysqli_error($dbc));

while ($result = mysqli_fetch_array($query)) 
    $interests = explode(",",$result['interests'],40);
    foreach($interests as $interest) 

        $select1 = "SELECT * from tagged";
        $query1 = mysqli_query($dbc, $select1) or die(mysqli_error($dbc));
        while ($result1 = mysqli_fetch_array($query1)) 
            echo "Interests:".$interest."<br>";
            echo "Tags:".$result1['tags']."<br>";
            $pos = strpos($result1['tags'], $interest);
            if ($pos===true) 
                echo "Result:true<br>";
             else 
                echo "Result:false<br>";
            
        
    

兴趣列表实际上是用逗号分隔的,所以我将其提取并分解为一个数组,然后使用strpos() 函数查找该数组元素在文章标签中的位置。但是所有结果都显示true,即使它们是false

The result 看起来像这样。

【问题讨论】:

strpos() 是否返回 true ?仔细阅读手册。 它不返回true。但它确实返回false..Nd如果我反转它..我会得到true.不是那样的吗? Strpos 返回字符串匹配的从通常为 0 的起始位置开始的字符数。使用 $pos!==false 等价于 $pos not 0... 表示未找到。 【参考方案1】:

函数strpos返回针存在的位置相对于干草堆字符串的开头。否则,如果没有找到针,则为 FALSE:

if ($pos!==false) 
    echo "Result:true<br>";
 else 
    echo "Result:false<br>";

【讨论】:

【参考方案2】:

使用stripos()

stripos() 函数查找一个字符串在另一个字符串中第一次出现的位置。

返回一个字符串在另一个字符串中第一次出现的位置,如果未找到该字符串,则返回 FALSE。注意:字符串位置从 0 开始,而不是 1。

注意:stripos() 函数不区分大小写。

如果条件应该是这样的

    if ($pos!==false) 
        ..............
     else 
        ..............
    

【讨论】:

以上是关于strpos 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

继续无法正常工作

mongoose 中的 UpdateMany 无法正常工作,但直接在 mongodb 中可以正常工作

简单的 C# 应用程序无法正常工作,在 Visual Studio 中运行时工作正常

AVPlayer 无法正常工作 - Swift

Bootstrap - 按钮切换无法正常工作

xmppframework 的 didReceive 存在无法正常工作