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
相关产品推荐
相关产品推荐

