0

所以我有这两个字符串:

$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'and'Suede'是在 Black 之前完成的。

有没有办法让它通过'black'搜索?

4

2 回答 2

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";
}
于 2017-10-10T14:23:27.097 回答
0

但是,字符串“Chair Material Suede Black”总是返回“TEMP_Category”,因为搜索“Red”和“Suede”是在“Black”之前完成的。

只是为了清楚起见,这仅仅是因为您使用的是elseif (stripos($title, 'Suede') !== false). 所以你永远不会达到第二个(顺便说一句。相同的)条件。elseifPHP 将在第一个匹配条件后每隔一个跳过。而且因为第一个将返回“TEMP_Category”(因为它不是Red),所以你得到了错误的结果。

接受@Fenton 的答案,因为这是您解决问题的方法;-)

于 2017-10-10T14:26:53.490 回答