strpos - 没有给出预期的结果

时间:2018-01-16 20:30:04

标签: php mysqli while-loop strpos

我正在尝试从我的数据库中查看一些信息,以检查项目代码是否包含在项目“密钥”中。

我期待这段代码只向我展示代码不是键的行 - 但是我似乎得到了结果的混合(代码存在的地方和其他代码不存在的地方)

我尝试将true更改为false,并得到一组类似的结果。

   while ($row = mysqli_fetch_array($query)){

        $itemcode = $row['itemcode'];
        $keys = $row['keys'];

        if (strpos($metakeywords, $itemcode) !== true) {
        echo 'code: ' . $itemcode . " keys: " . $metakeywords . "<br /><br />" ;
    }

预期输出:
代码:ABC123键:播种机,绿色,窗口
代码:DEF456键:蓝色,户外,花园

实际输出:
代码:ABC123键:播种机,绿色,窗口
代码:CBA321键:红色,室内,播种机,CBA321
代码:DEF456键:蓝色,户外,花园
代码:FED654键:粉色,植物,FED654,自动浇水

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

strpos()在找到匹配项时不会返回true,它会返回匹配的位置。

如果您想知道什么时候不匹配,请使用:

if (strpos($metakeywords, $itemcode) === false) {

你可能完全可以在SQL查询中完成,而不是在PHP中。

答案 1 :(得分:1)

strpos无法返回true。如果匹配则返回一个数字,否则返回false。由于您希望if语句块在不匹配时运行,因此将true更改为false 并将 !==更改为===

if ( strpos($metakeywords, $itemcode) === false ) {