PHP+ACF多关键词文本匹配循环代码报错求助
多关键词匹配ACF字段的PHP代码修正
你的代码存在两个核心错误:
- strpos函数用法错误:strpos仅支持3个参数(目标字符串、单个关键词、可选的起始搜索位置),无法一次性传入多个关键词。
- 条件判断逻辑错误:strpos返回的是关键词在字符串中的起始位置(整数)或
false(未找到),不可能等于关键词本身的字符串内容。
修正后的代码
$text = get_field('my_acf_field'); // 用数组关联关键词与对应输出,后续维护更便捷 $keywordMap = [ "text" => "Lorem Ipsum 1", "text 2" => "Lorem Ipsum 2", "text 3" => "Lorem Ipsum 3" ]; $found = false; foreach ($keywordMap as $keyword => $output) { // 用!==严格判断,避免关键词在起始位置时返回0被误判为未找到 if (strpos($text, $keyword) !== false) { echo $output; $found = true; break; // 找到第一个匹配项就停止,若需匹配所有关键词可删除此句 } } if (!$found) { echo "Text not found"; }
代码说明
- 使用数组
$keywordMap统一管理关键词和对应输出,新增或修改关键词时只需调整数组,无需修改判断逻辑。 - 严格用
strpos($text, $keyword) !== false判断关键词是否存在,避免因关键词位于字符串起始位置(返回0)被误判为未找到。 - 如果需要支持多个关键词同时匹配并输出所有对应内容,只需移除
break语句即可。
内容的提问来源于stack exchange,提问作者Magnus Schmidt
相关产品推荐
相关产品推荐

