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

如何优化服装尺码多类型识别的多条件判定算法?

优化方案

核心优化方向:将互斥的尺码判断逻辑拆分为独立的单职责函数,按优先级顺序判断类型,彻底消除多层嵌套,同时支持提前终止判断提升性能。

预设规则(完全对齐需求)

  • 无尺码:尺码数组为空,优先级最高
  • 区间型:所有尺码包含-连接符
  • 文字型:所有尺码属于预设字母尺码白名单
  • 数值型:所有尺码匹配数值/分数/英寸格式正则
  • 长文本型:所有尺码包含不区分大小写的size关键词

实现代码

// 可单独维护的配置常量,后续调整规则不需要修改主逻辑
const TEXTUAL_SIZE_LIST = ['3XS', '2XS', 'XXXS', 'XXS', 'XS', 'S', 'M', 'L', 'XL', 'XXL', 'XXXL', '2XL', '3XL'];
const NUMERIC_SIZE_PATTERN = '/^\d+(?:\.\d+)?(?: \d+\/\d+)?(?:''|")?$/';

/**
 * 判断单条尺码是否为区间型
 */
function isRangeSize(string $size): bool
{
    return strpos($size, '-') !== false;
}

/**
 * 判断单条尺码是否为文字型
 */
function isTextualSize(string $size): bool
{
    return in_array($size, TEXTUAL_SIZE_LIST);
}

/**
 * 判断单条尺码是否为数值型
 */
function isNumericSize(string $size): bool
{
    return preg_match(NUMERIC_SIZE_PATTERN, $size) === 1;
}

/**
 * 判断单条尺码是否为长文本型
 */
function isVerboseSize(string $size): bool
{
    return stripos($size, 'size') !== false;
}

/**
 * 识别单款产品的尺码类型
 * @param array $sizes 产品尺码数组
 * @return string 类型标识:range/textual/numeric/verbose/sizeless/unknown
 */
function detectSizeType(array $sizes): string
{
    // 优先判断无尺码
    if (empty($sizes)) {
        return 'sizeless';
    }

    // 单轮遍历统计各类型匹配次数,适合尺码数量多的场景,性能更优
    $total = count($sizes);
    $match = [
        'range' => 0,
        'textual' => 0,
        'numeric' => 0,
        'verbose' => 0
    ];

    foreach ($sizes as $size) {
        isRangeSize($size) && $match['range']++;
        isTextualSize($size) && $match['textual']++;
        isNumericSize($size) && $match['numeric']++;
        isVerboseSize($size) && $match['verbose']++;
    }

    // 按优先级返回匹配所有尺码的类型
    if ($match['range'] === $total) return 'range';
    if ($match['textual'] === $total) return 'textual';
    if ($match['numeric'] === $total) return 'numeric';
    if ($match['verbose'] === $total) return 'verbose';

    // 兜底逻辑,可根据业务需求调整
    return 'unknown';
}

// 主逻辑调用示例
foreach ($products as $prod) {
    $prodSizeType = detectSizeType($prod['sizes']);
    // 后续根据类型做对应排序处理即可
}

优化优势

  1. 可读性强:每个函数仅处理单一判断逻辑,规则调整仅需要修改对应函数,不需要改动嵌套结构
  2. 性能更优:仅遍历1次尺码数组即可完成所有类型的匹配统计,无多余遍历
  3. 易维护:白名单、正则都抽为独立常量,后续新增尺码规则不需要改主流程代码
  4. 易用性高:直接返回类型标识字符串,比原方案的4个布尔变量更便于后续逻辑判断

内容的提问来源于stack exchange,提问作者Faye D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 13:57:03