PHP子串查找替换问题求助:代码始终返回false排查
问题分析与解决方案
你的代码有两个关键问题导致$check始终为false,咱们一步步拆解来看:
1. strpos的判断逻辑错误
在PHP中,strpos()找到子串时会返回它的起始索引位置(从0开始计数);找不到才返回false。你的初始字符串abcbabababbbacc里,abc正好在开头(索引0),这时候strpos($set, "abc")返回0,而PHP里0在布尔判断中会被视为false,导致你的if条件根本不会执行,$check自然一直保持初始的false。
正确的判断方式必须用**严格不等于!==**来区分索引0和false:
if(strpos($set, "abc") !== false)
2. preg_replace的用法错误
preg_replace()的第一个参数要求是带分隔符的正则表达式,直接写"abc"会触发PHP警告(缺少正则分隔符,比如/),导致替换操作失败。而且如果只是做普通的字符串替换,完全没必要用正则函数,str_replace()更简单高效,还不会有正则相关的额外开销。
修正后的完整代码
$check = false; $set = "abcbabababbbacc"; // 假设你的初始字符串为这个 if(strpos($set, "abc") !== false) { // 用str_replace处理普通字符串替换更合适 $set = str_replace("abc", "aab", $set); $check = true; } return $check;
修改后代码就能正确检测到abc的存在,完成替换并将$check设为true了。
内容的提问来源于stack exchange,提问作者Hariti Desai
相关产品推荐
相关产品推荐

