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

如何基于指定键对PHP多维数组剔除模糊重复项?

处理重复的serviceType-unit键对条目问题

我开发了一个允许用户选择服务类型、单位及对应费率的页面(如“翻译”“按词”“0.05”),但无法阻止用户添加相同serviceType-unit键对但费率不同的条目,因此需要从$_POST数组中剔除这类模糊重复项。

示例数组

$rates = array(
    array("serviceType" => 1, "unit" => "word", "unitRate" => "0.05000"),
    array("serviceType" => 2, "unit" => "word", "unitRate" => "0.02500"),
    array("serviceType" => 3, "unit" => "hour", "unitRate" => "15.0000"),
    array("serviceType" => 4, "unit" => "hour", "unitRate" => "15.0000"),
    array("serviceType" => 5, "unit" => "hour", "unitRate" => "25.0000"),
    >>> array("serviceType" => 1, "unit" => "word", "unitRate" => "0.04000"),
    array("serviceType" => 6, "unit" => "minute", "unitRate" => "7.0000"),
    array("serviceType" => 7, "unit" => "minute", "unitRate" => "1.5000"),
    array("serviceType" => 8, "unit" => "minute", "unitRate" => "0.28330")
);

当前实现步骤

  • 复制原数组:
    $rates_purged = $rates;
    
  • 移除unitRate键值以使用array_unique:
    for($i = 0; $i < count($rates); $i++) {
        $unitRates[] = $rates[$i]['unitRate'];
        unset($rates[$i]['unitRate']);
    }
    
  • 去除重复项:
    $ratesUnique = array_unique($rates, SORT_REGULAR);
    
  • 找出被移除的子数组:
    $diff = array_diff_key($rates, $ratesUnique);
    
  • 获取待移除的键并删除对应子数组:
    foreach(array_keys($diff) as $key) {
        $remove = $key;
    }
    unset($rates_purged[$remove]);
    

更优实现方式

当前方法存在两个明显问题:一是多次操作数组效率较低,二是最后一步只能删除最后一个识别到的重复项,若存在多个重复条目会漏处理。更高效简洁的方式是通过一次遍历,用serviceType和unit拼接成唯一键来过滤重复项:

$purifiedRates = [];
foreach ($rates as $rate) {
    // 生成唯一标识键,区分不同的serviceType-unit组合
    $uniqueKey = $rate['serviceType'] . '-' . $rate['unit'];
    // 保留第一次出现的条目,若要保留最后一次出现的,去掉!isset判断即可
    if (!isset($purifiedRates[$uniqueKey])) {
        $purifiedRates[$uniqueKey] = $rate;
    }
}
// 可选:重置数组索引为连续数字
$purifiedRates = array_values($purifiedRates);

优势说明

  • 效率更高:仅需一次遍历,时间复杂度为O(n),避免了原方法中多次数组拆分、去重、对比的额外开销
  • 逻辑清晰:直接通过唯一键判断重复,无需修改原数组结构,代码可读性更强
  • 灵活性强:可以自由选择保留首次或末次出现的条目,适配不同业务需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 19:03:17