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

PHP如何拆分含多词分类名的字符串为保留分类项的数组?

最优实现方案:正则匹配+优先级排序

直接上可运行的PHP代码,完美解决你的需求:

<?php
// 你的原始数据
$content = "lorem ipsum bla bla bla cat1 bla bla bla kids and baby";
$categories_array = ["cat1", "kids and baby", "cat3"];

// 步骤1:按分类长度降序排序——确保多词分类优先被匹配,避免被拆成单个单词
usort($categories_array, function($a, $b) {
    return strlen($b) - strlen($a);
});

// 步骤2:转义分类中的正则特殊字符(比如.、*、+这类),防止正则语法错误
$escaped_categories = array_map(function($category) {
    return preg_quote($category, '/');
}, $categories_array);

// 步骤3:构建正则模式——要么匹配完整的分类项,要么匹配单个非空白单词
$pattern = '/(' . implode('|', $escaped_categories) . '|\S+)/';

// 步骤4:全局匹配所有符合规则的内容
preg_match_all($pattern, $content, $matches);

// 最终结果
$content_array = $matches[0];

// 输出测试
print_r($content_array);
?>

运行结果(完全符合你的期望):

Array
(
    [0] => lorem
    [1] => ipsum
    [2] => bla
    [3] => bla
    [4] => bla
    [5] => cat1
    [6] => bla
    [7] => bla
    [8] => bla
    [9] => kids and baby
)

为什么这是最优方案?

  • 效率极高:仅需一次正则扫描即可完成拆分,避免了循环查询分类的资源消耗问题。
  • 彻底解决多词分类拆分问题:通过按分类长度降序排序,让长的多词分类优先被匹配,不会被拆分成单个单词(比如"kids and baby"会被完整识别,而不是拆成"kids"、"and"、"baby")。
  • 鲁棒性强:用preg_quote转义正则特殊字符,即使分类里包含.、*、+这类特殊符号,也不会导致正则报错。
  • 代码简洁:逻辑清晰,没有复杂的字符串拼接或循环判断,维护成本低。

边缘情况处理

如果你的分类中存在重叠项(比如同时有"baby"和"kids and baby"),排序逻辑会优先匹配更长的"kids and baby",完全符合预期;如果分类包含标点符号或特殊字符,preg_quote会自动转义,保证正则正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 16:17:56