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

如何从多个差异字符串中提取公共内容以生成统一的产品基准标题

如何从多个差异字符串中提取公共内容以生成统一的产品基准标题

看起来你已经找对了方向,但卡在了按字符对比的误区里——你的思路是对的,但应该按「词」而不是单个字符来拆分对比,这样就能避开字符重复导致的混乱结果。

先说说你的问题核心:你需要从所有产品标题中提取所有字符串都包含的词单元,并且保留它们的原始顺序,去掉那些只出现在部分标题里的差异内容(比如颜色、附加描述)。

正确的实现步骤

我给你整理一个通用、高效的方案,适配任意数量的输入字符串(只要≥1),而且逻辑清晰:

1. 预处理与拆分字符串

首先把每个标题拆分成「词单元」,这里要先统一格式:清理多余空格、处理特殊符号(可选,根据你的需求调整),然后按空格拆分。这样每个标题都会变成一个词数组,方便后续对比。

2. 提取所有标题的公共词

用PHP的array_intersect结合call_user_func_array来处理任意数量的词数组——array_intersect可以找出所有数组的公共元素,而call_user_func_array能把你的词数组列表作为参数传递进去,解决数量可变的问题,不用硬编码数组索引。

3. 拼接成最终基准标题

把提取到的公共词按原始顺序拼接成字符串,就是你要的基准标题了。

完整代码示例

针对你给出的测试数据,代码如下:

<?php
$test = array(
    'Super red Megaman T-shirt',
    'Super Megaman blue T-shirt',
    'Super black Megaman T-shirt',
    'Super Megaman T-shirt - aquamarine',
);

// 1. 预处理并拆分每个标题为词数组
$wordArrays = array_map(function($str) {
    // 可选:统一处理特殊符号,这里保留连字符、字母数字和空格
    $cleanStr = preg_replace('/[^\w\s-]/', ' ', $str);
    // 替换多空格为单空格,去除首尾空格
    $cleanStr = preg_replace('/\s+/', ' ', trim($cleanStr));
    // 按空格拆分
    return preg_split('/\s+/', $cleanStr);
}, $test);

// 2. 提取所有数组的公共词(适配任意数量的输入字符串)
if (count($wordArrays) === 0) {
    $commonTitle = '';
} else {
    $commonWords = call_user_func_array('array_intersect', $wordArrays);
    // 3. 拼接成最终标题
    $commonTitle = implode(' ', $commonWords);
}

echo $commonTitle;
// 输出:Super Megaman T-shirt
?>

为什么这个方案比你的原方法好?

  • 按词对比而非字符:彻底解决了字符重复导致的错误(比如原方法里的「re」残留),直接针对有意义的词单元对比,结果更准确。
  • 适配任意数量的输入:不管是2个还是6个标题,call_user_func_array都能自动处理,不需要修改代码适配数量。
  • 可灵活调整预处理规则:如果你的标题有其他特殊格式(比如斜杠、括号),只需要修改预处理里的正则就能快速适配。

边缘情况的优化建议

  1. 词顺序不一致的情况:如果某个标题的核心词顺序颠倒了(比如「Megaman Super T-shirt」),array_intersect会保留第一个标题的词顺序。如果需要更严格的顺序一致性,可以额外检查公共词在所有数组中的出现顺序,不过考虑到你是做产品标题的基准,核心词顺序应该是统一的,这个情况可能很少见。
  2. 重复词的情况:如果某个标题里有重复的核心词(比如「Super Super Megaman T-shirt」),最终结果会保留重复的词。如果你想去重,可以在拼接前对$commonWords做处理:$commonWords = array_values(array_unique($commonWords));(array_values是为了重新整理索引,避免拼接时出现空值)。
  3. 大小写不一致:如果标题有大小写差异(比如「super Megaman」和「Super megaman」),可以在预处理时统一转成小写或大写,对比完成后再还原成第一个标题的大小写(或者统一格式)。

这个方案应该完全满足你的需求——既高效,又能处理大多数实际场景,而且省了你大量手动调整的时间~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 13:14:53