讲师中心 微信公众号
AI工具推荐 视频效率加速

如何过滤多维数组中被完全包含的重复行并提取唯一 rolanID

冬杰小哥_9402

冬杰小哥_9402

发布时间:2026-10-06 09:54:27

|

907人浏览过

|

来源于php中文网

原创

如何过滤多维数组中被完全包含的重复行并提取唯一 rolanID

本文介绍一种高效算法,用于从多维数组中剔除所有 rolanID 均被其他供应商完全覆盖的行,并对保留行的 rolanID 进行去重精简,最终输出仅含真正独立数据的净化数组。

本文介绍一种高效算法,用于从多维数组中剔除所有 `rolanid` 均被其他供应商完全覆盖的行,并对保留行的 `rolanid` 进行去重精简,最终输出仅含真正独立数据的净化数组。

在处理供应商与商品 ID(如 rolanID)映射关系的业务场景中,常需识别“冗余供应商”——即其全部商品 ID 已被另一家(或多家)供应商完整包含。此时,该供应商的数据不再提供增量信息,应被过滤;同时,为避免后续重复计算,还需从保留供应商的 rolanID 中剔除已被上游完全覆盖的部分。

核心思路是:基于 ID 的跨行归属分析。我们不逐对比较数组(O(n²) 复杂度高且易漏判),而是先构建一张全局索引表 id → [row_indices],记录每个 rolanID 出现在哪些供应商行中;再对每行遍历其所有 rolanID,求它们共同出现的行索引交集。若交集大小为 1,说明该行是此组 ID 的唯一承载者,不可被替代;否则(交集 ≥ 2),意味着至少存在另一行也包含全部这些 ID,当前行即为冗余,应舍弃。

以下是完整可运行的 PHP 实现:

<?php

$test = [
    [
        "supplier" => "TEST DEPO",
        "rolanID" => [123, 234, 456],
        "itemCount" => 3
    ],
    [
        "supplier" => "ANOTHER DEPO",
        "rolanID" => [123, 786, 345],
        "itemCount" => 3
    ],
    [
        "supplier" => "ROLAN",
        "rolanID" => [123, 234],
        "itemCount" => 2
    ]
];

// Step 1: 构建 rolanID 到行索引的反向映射
$idToRows = [];
foreach ($test as $idx => $row) {
    foreach ($row['rolanID'] as $id) {
        if (!isset($idToRows[$id])) {
            $idToRows[$id] = [];
        }
        $idToRows[$id][] = $idx;
    }
}

// Step 2: 对每行计算其 rolanID 的公共行索引交集
$result = [];
foreach ($test as $idx => $row) {
    $commonRows = null;
    foreach ($row['rolanID'] as $id) {
        if (!isset($idToRows[$id])) {
            // 若某 ID 未出现在任何行(理论上不应发生),则视为孤立,保留本行
            $commonRows = [$idx];
            break;
        }
        if ($commonRows === null) {
            $commonRows = $idToRows[$id];
        } else {
            $commonRows = array_intersect($commonRows, $idToRows[$id]);
        }
    }

    // 若公共行索引仅包含自身,则该行具有不可替代性,保留
    if ($commonRows !== null && count($commonRows) === 1 && current($commonRows) === $idx) {
        $result[] = $row;
    }
}

// 可选:进一步精简保留行中的 rolanID(剔除已被上游完全覆盖的部分)
// 此处按题意要求,仅做行级过滤;若需像示例输出那样精简 rolanID 数组,
// 可在上述循环后追加逻辑:对每个保留行,执行 array_diff($row['rolanID'], 所有前置保留行的 rolanID 并集)
print_r($result);

?>

关键注意事项:

  • 该算法时间复杂度为 O(N×M),其中 N 为行数、M 为平均每行 rolanID 数量,远优于暴力两两比较;
  • array_intersect 在内部自动去重,无需额外调用 array_unique;
  • 示例输出中 "ANOTHER DEPO" 的 rolanID 被精简为 [786, 345],是因为 123 已存在于 "TEST DEPO" 中——但原始问题描述聚焦于行过滤,而非ID 精简。若需实现后者,应在得到 $result 后,按顺序遍历并累加已知唯一 ID 集合,再对每行 rolanID 执行 array_diff;
  • 输入数据需确保 rolanID 为数值或字符串类型数组,避免混合类型导致 array_intersect 行为异常。

通过此方法,您可稳健识别并移除语义冗余的供应商数据,为后续聚合、去重或报表生成奠定干净的数据基础。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

10044

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

5961

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2075

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

3728

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

4434

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

3471

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4957

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

3882

2023.11.13

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn