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

PHP中strpos判断字符串包含关系失效问题咨询

问题原因分析

核心差异出在strpos的判断逻辑上:

  • strpos函数找到匹配字符串时,会返回它的起始索引位置;找不到则返回false。
  • 你的测试代码里,"BEN_W"在字符串开头,strpos返回0。如果用的是非严格判断(比如if(strpos(...))),PHP会把0视为布尔值false,所以不会执行后续输出代码。而"NICOLA_M"的起始位置是5(非0),非严格判断会把它当成true,因此能正常输出。
  • 业务代码的遍历逻辑里,应该用了**严格不等于!== false**的判断方式(比如if(strpos(...) !== false)),这样0会被正确识别为有效的索引位置,所以能匹配到"BEN_W"和"NICOLA_M",正常执行邮件发送逻辑。

举个具体的代码对比:

测试代码(问题版)

$donor_comment_string = "BEN_W,NICOLA_M";
// 非严格判断,0被当作false,不会执行
if(strpos($donor_comment_string, "BEN_W")) {
    echo "TESTBen";
}
// 返回5(非0),会执行
if(strpos($donor_comment_string, "NICOLA_M")) {
    echo "TESTNicola";
}

业务代码(正常版)

$donors = ["BEN_W", "NICOLA_M"];
$donor_comment_string = "BEN_W,NICOLA_M";
foreach($donors as $donor) {
    // 严格判断,0 !== false,会执行
    if(strpos($donor_comment_string, $donor) !== false) {
        // 发送邮件逻辑
        echo "邮件发送成功:{$donor}\n";
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:12:09