Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在多次搜索1个字符串时,IF语句给出了错误的结果_Php_String_Stripos - Fatal编程技术网

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

Php 在多次搜索1个字符串时,IF语句给出了错误的结果,php,string,stripos,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 {retur

所以我有两个字符串:

$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'
是在搜索黑色之前完成的


有没有办法让它进入“黑色”搜索?

将两个检查结合起来:

elseif (stripos($title, 'Suede') !== false && stripos($title, 'Red') !== false) {
并将else with TEMP_类别移动到检查的末尾

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";
}

将两个检查组合起来:

elseif (stripos($title, 'Suede') !== false && stripos($title, 'Red') !== false) {
并将else with TEMP_类别移动到检查的末尾

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";
}
但是,字符串“椅子材质翻毛皮黑色”总是返回 “临时类别”,因为“红色”和“绒面革”的搜索已完成 在黑色之前

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

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

但是,字符串“椅子材质翻毛皮黑色”总是返回 “临时类别”,因为“红色”和“绒面革”的搜索已完成 在黑色之前

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


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

可能是因为它首先碰到了绒面革/红块。在第一个绒面革检查内部添加黑色检查,使用
else if
if(hasSuede){if(isRed){return“red”;}elseif(isBlue){return“blue”;}return“Suede”;}
在同一个变量中有两个字符串?可能是因为它首先碰到了绒面革/红色块。在第一个绒面革检查中添加黑色检查,使用
else if
if(hasSuede){if(isRed){return“red”;}elseif(isBlue){return“blue”;}return“Suede”;}
在同一个变量中有两个字符串吗?