You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP IF语句逻辑问题:多字符串匹配后仅全不匹配执行else

解决多字符串关键词匹配及高亮问题

你当前代码的核心问题是:最后那个else只和最后一个if绑定,不管前面的字符串有没有匹配到关键词,只要最后一个字符串没匹配,就会触发"No such word",完全不符合「所有字符串都没匹配才输出提示」的需求。

修正思路

新增一个标记变量记录是否找到匹配,所有字符串检查完成后,再根据这个变量判断是否输出提示。另外要注意:stripos如果在字符串开头找到关键词会返回0,直接用if(stripos(...))会把0当成false,必须用!== false做严格判断。

修正后的代码

<?php
// 初始化标记变量,默认未找到匹配
$found = false;

// 检查并处理第一个字符串
if (stripos($str, $text)!== false) {
    $str = preg_replace("/\b([a-z]*${fwcode}[a-z]*)\b/i", "<font color='red'><b>$1</b></font>", $str);
    echo $str . "<br>";
    $found = true;
}

// 检查并处理第二个字符串
if (stripos($str2, $text)!== false) {
    $str2 = preg_replace("/\b([a-z]*${fwcode}[a-z]*)\b/i", "<font color='red'><b>$1</b></font>", $str2);
    echo $str2;
    $found = true;
}

// 检查并处理第三个字符串
if (stripos($str3, $text)!== false) {
    $str3 = preg_replace("/\b([a-z]*${fwcode}[a-z]*)\b/i", "<font color='red'><b>$1</b></font>", $str3);
    echo $str3;
    $found = true;
}

// 检查并处理第四个字符串
if (stripos($str4, $text)!== false) {
    $str4 = preg_replace("/\b([a-z]*${fwcode}[a-z]*)\b/i", "<font color='red'><b>$1</b></font>", $str4);
    echo $str4;
    $found = true;
}

// 所有检查完成后,判断是否完全没有匹配
if (!$found) {
    echo "No such word";
}
?>

关键说明

  • $found变量全程追踪匹配状态,只要有一个字符串匹配到关键词就设为true
  • 每个stripos判断用!== false,避免关键词在字符串起始位置时的误判
  • 把原来绑定在最后一个if的else,改成统一检查$found的独立if语句,确保只有所有字符串都没匹配时才输出提示

内容的提问来源于stack exchange,提问作者Kris Ivanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 13:35:25