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

多维数组行过滤:移除重复值及无唯一值的行

处理PHP多维数组的重复rolanID过滤方案

先把需求明确拆解:

  • 移除所有rolanID在其他供应商条目中也存在的行
  • 对于仅属于某一个供应商的rolanID,保留该供应商的条目,若同一供应商下该ID有多行则累加itemCount
  • 最终数组仅保留各供应商的独有rolanID及合并后的itemCount

先给个输入示例方便对照:

$input = [
    ['supplier' => 'A', 'rolanID' => 101, 'itemCount' => 2],
    ['supplier' => 'A', 'rolanID' => 102, 'itemCount' => 3],
    ['supplier' => 'B', 'rolanID' => 101, 'itemCount' => 1],
    ['supplier' => 'B', 'rolanID' => 103, 'itemCount' => 4],
    ['supplier' => 'C', 'rolanID' => 104, 'itemCount' => 5],
    ['supplier' => 'C', 'rolanID' => 104, 'itemCount' => 2], // 同一供应商同一ID的重复行
];

这里rolanID=101跨A、B两个供应商,所以对应的两行都要删除;A的102、B的103、C的104是各自独有的ID,C的104两行要合并itemCount为7。

实现代码

// 第一步:统计每个rolanID对应的供应商集合,判断是否跨供应商重复
$rolanSupplierMap = [];
foreach ($input as $item) {
    $id = $item['rolanID'];
    if (!isset($rolanSupplierMap[$id])) {
        $rolanSupplierMap[$id] = [];
    }
    // 用数组键存供应商,自动去重(同一供应商多次出现同一ID只记一次)
    $rolanSupplierMap[$id][$item['supplier']] = true;
}

// 第二步:筛选有效条目并合并itemCount
$result = [];
foreach ($input as $item) {
    $id = $item['rolanID'];
    // 仅保留当前供应商独有的rolanID
    if (count($rolanSupplierMap[$id]) === 1 && array_key_exists($item['supplier'], $rolanSupplierMap[$id])) {
        $supplier = $item['supplier'];
        // 同一供应商同一ID累加itemCount
        if (!isset($result[$supplier][$id])) {
            $result[$supplier][$id] = [
                'supplier' => $supplier,
                'rolanID' => $id,
                'itemCount' => 0
            ];
        }
        $result[$supplier][$id]['itemCount'] += $item['itemCount'];
    }
}

// 把分组后的二维数组转成和输入一致的一维数组
$result = array_merge(...array_values($result));

// 输出结果
print_r($result);

代码说明

  1. 统计ID的供应商分布:通过一次遍历,给每个rolanID记录所有出现过的供应商,快速判断该ID是否跨供应商重复。
  2. 筛选合并有效数据:再次遍历输入,只保留独属于当前供应商的ID,同时对同一供应商同一ID的itemCount做累加,避免同一供应商下同一ID出现多条。
  3. 格式统一:最后把按供应商分组的数组转成一维,和输入格式保持一致。

运行示例输入后,输出结果为:

Array
(
    [0] => Array
        (
            [supplier] => A
            [rolanID] => 102
            [itemCount] => 3
        )

    [1] => Array
        (
            [supplier] => B
            [rolanID] => 103
            [itemCount] => 4
        )

    [2] => Array
        (
            [supplier] => C
            [rolanID] => 104
            [itemCount] => 7
        )
)

这个方案能覆盖所有场景,不管供应商数量多少、同一供应商下同一ID重复多少次,都能正确过滤和合并。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:18:21