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

PHP多维数组去重:筛选值唯一的问题ID数组

处理多维数组标签去重并筛选10个唯一项

嘿,这个需求我太熟了,咱们一步步来搞定它:

核心思路

首先得把标签数组完全相同的项合并掉,只保留一个对应的问题ID,然后从去重后的结果里挑出10个就行。这里用PHP实现的话,核心是把标签数组转换成唯一的字符串键,利用数组键的唯一性自动去重。

代码实现

第一步:去重处理

假设你的原始数组是类似这样的结构:

$originalArray = [
    1 => ['php', 'array', 'duplicate'],
    2 => ['php', 'array', 'duplicate'], // 和ID1的标签完全一致,会被剔除
    3 => ['javascript', 'dom'],
    4 => ['css', 'layout'],
    // ... 剩下的30+项
];

然后执行去重逻辑:

$uniqueTagMap = [];
foreach ($originalArray as $questionId => $tags) {
    // 👉 注意:如果标签顺序不同但内容相同也算重复,先给标签排序
    // sort($tags);
    
    // 把标签数组转成唯一字符串作为键(选个标签里不会出现的分隔符,比如|)
    $tagKey = implode('|', $tags);
    
    // 只保留第一个出现的该标签组合的问题ID
    if (!isset($uniqueTagMap[$tagKey])) {
        $uniqueTagMap[$tagKey] = $questionId;
    }
}

// 把去重后的结果转回原数组格式:问题ID => 标签数组
$dedupedArray = [];
foreach ($uniqueTagMap as $questionId) {
    $dedupedArray[$questionId] = $originalArray[$questionId];
}

第二步:筛选10个项

去重后如果数量≥10,直接取前10个(保留原问题ID):

// 取前10个标签唯一的项
$finalResult = array_slice($dedupedArray, 0, 10, true);

如果想要随机选10个,换成这段代码:

// 随机选10个问题ID
$randomQuestionIds = array_rand($dedupedArray, 10);
$finalResult = [];
foreach ($randomQuestionIds as $id) {
    $finalResult[$id] = $dedupedArray[$id];
}

关键细节提醒

  • 关于标签顺序:如果你的需求里,['a','b']和['b','a']算相同标签组合,记得打开代码里的sort($tags)注释,先排序再生成唯一键。
  • 分隔符选择:一定要选标签里绝对不会出现的字符,避免不同标签组合生成相同的键(比如标签里有逗号就别用逗号当分隔符)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:14:22