当多次搜索1个字符串时,IF语句会给出错误的结果

时间:2017-10-10 14:19:25

标签: php string stripos

所以我有这两个字符串:

$title = 'Chair Material Suede Black';

$title = 'Chair Material Suede Red';

这是我的PHP函数的片段:

elseif (stripos($title, 'Suede') !== false) {
    if (stripos($title, 'Red') !== false) {
        return 'Red Suede Chair';
    }
    else {return "TEMP_Category";}
}

该功能继续,下面有50行代码:

elseif (stripos($title, 'Suede') !== false) {
        if (stripos($title, 'Black') !== false) {
            return 'Black Suede Chair';
        }
        else {return "TEMP_Category";}
    }

但是,字符串'Chair Material Suede Black'始终返回'TEMP_Category',因为'Red''Suede'的搜索是在黑色搜索之前完成的。

有没有办法让它传递给'black'搜索?

2 个答案:

答案 0 :(得分:3)

结合两项检查:

elseif (stripos($title, 'Suede') !== false && stripos($title, 'Red') !== false) {

将TEMP_Category的else移动到检查结束。

elseif (stripos($title, 'Suede') !== false && stripos($title, 'Red') !== false) {
    return 'Red Suede Chair';
} elseif (stripos($title, 'Suede') !== false && stripos($title, 'Black') !== false) {
    return 'Black Suede Chair';
} else {
    return "TEMP_Category";
}

答案 1 :(得分:0)

  

然而,字符串'椅子材料绒面革黑色'总是回来   ' TEMP_Category',因为搜索了红色'和' Suede'已经完成了   在黑人之前。

为了清楚起见,仅仅是因为您正在使用datediff。所以你永远不会达到第二个(顺便说一下,相同的)条件。在第一个匹配条件之后,PHP将跳过每隔一个elseif (stripos($title, 'Suede') !== false)。 并且因为第一个将返回" TEMP_Category" (因为它不是红色)你会得到错误的结果。

接受@Fenton的答案,因为它是如何解决的; - )