PHP:如何用preg_match_all+foreach生成无尾逗号的匹配键逗号分隔列表
问题解决方法
原代码的核心问题是未收集所有匹配的键,直接输出单个结果导致无法生成带分隔符的合规列表。以下是修正后的代码:
<?php $content = "They were FRIENDS. JAKE and JANE make a CAKE."; $general_outcomes = [ '1' => 'FRIENDS', '2' => 'CAKE', '3' => 'JANE', '4' => 'JAKE', '5' => 'MEGAN' // not present ]; $matched_slugs = []; foreach ($general_outcomes as $slug => $outcome) { // 转义正则特殊字符,避免匹配逻辑异常 if (preg_match('/\b' . preg_quote($outcome, '/') . '\b/u', $content)) { $matched_slugs[] = $slug; } } // 自动生成无尾逗号的逗号分隔列表 echo implode(',', $matched_slugs);
关键修正说明:
- 新增
$matched_slugs数组,专门存储所有匹配成功的键 - 用
preg_match替代preg_match_all,只需确认单词存在即可,无需统计出现次数 - 添加
preg_quote处理待匹配单词,避免其中的正则特殊字符(如.、*)干扰匹配结果 - 最后通过
implode(',', $matched_slugs)生成目标字符串,该函数会自动处理分隔符,不会在末尾添加多余逗号
运行修正后的代码,输出结果为:
1,2,3,4
内容的提问来源于stack exchange,提问作者Boris Smolyanov
相关产品推荐
相关产品推荐

