代码之家  ›  专栏  ›  技术社区  ›  oliverbj

php-求和非重复数组

  •  5
  • oliverbj  · 技术社区  · 7 年前

    我一整天都在尝试根据数组的值求和,只得到不同的值。

    这是我的输入数组:

    [
        {
            "commoditycodes": "6204.4400",
            "statisticalvalue": 1152.6,
            "cvr": "DK35425950"
        },
        {
            "commoditycodes": "6204.4400",
            "statisticalvalue": 542.4,
            "cvr": "DK35425950"
        },
        {
            "commoditycodes": "6104.4300",
            "statisticalvalue": 1827,
            "cvr": "DK35425950"
        },
        {
            "commoditycodes": "6114.3000",
            "statisticalvalue": 5211.36,
            "cvr": "DK37968552"
        },
        {
            "commoditycodes": "6114.3000",
            "statisticalvalue": 798.64,
            "cvr": "DK99999999"
        }
    ]
    

    我正在尝试“收集”所有具有 相同的 cvr 值,但仍然根据 commoditycodes . 这样地:

    {
        "commoditycodes": "6204.4400",
        "statisticalvalue": 1695,
        "cvr": "DK35425950"
    },
    {
        "commoditycodes": "6104.4300",
        "statisticalvalue": 1827,
        "cvr": "DK35425950"
    },
    {
        "commoditycodes": "6114.3000",
        "statisticalvalue": 5211.36,
        "cvr": "DK37968552"
    },
    {
        "commoditycodes": "6114.3000",
        "statisticalvalue": 798.64,
        "cvr": "DK99999999"
    }
    

    ]

    如您所见,从输入中,我的数组的前两个结果有:

    • 相同商品代码
    • 相同的CVR值

    然后我们求和 statisticalvalue .

    第三个结果与前两个结果的cvr值相同, 然而 这个 commoditycode 值是不同的-所以这是一个唯一的值。

    我的数组的第四和第五个元素也是唯一的。

    所以基本上,我想总结一下 统计值 哪里:

    • CVR值相同
    • 商品代码相同

    我尝试了以下方法:

    $result = [];
    
    foreach ($array as $val) {
        //Not a duplicate cvr code
        if (!isset($result[$val['cvr']])) {
            $result[$val['cvr']] = $val;
        //Duplicate cvr code.
        } else {
            $result[$val['cvr']]['statisticalvalue'] += $val['statisticalvalue'];
    
        }
    }
    

    但它在下面返回,只取 CVR 价值观——但不是 商品代码 :

    [
        {
            "commoditycodes": "6104.6300",
            "statisticalvalue": 68701.56,
            "cvr": "DK35425950"
        },
        {
            "commoditycodes": "6104.6300",
            "statisticalvalue": 21108.95,
            "cvr": "DK37968552"
        },
        {
            "commoditycodes": "6114.3000",
            "statisticalvalue": 798.64,
            "cvr": "DK99999999"
        }
    ]
    

    我完全迷路了怎么检查这个?

    1 回复  |  直到 7 年前
        1
  •  3
  •   splash58    7 年前

    使用复杂索引创建数组 $val['cvr'].'|'.$val['commoditycodes']

    $result = [];
    
    foreach ($array as $val) {
        $index = $val['cvr'].'|'.$val['commoditycodes'];
        if (!isset($result[$index])) {
            $result[$index] = $val;
        //Duplicate
        } else {
            $result[$index]['statisticalvalue'] += $val['statisticalvalue'];
        }
    }
    

    如果要使用数字索引生成结果数组,请在循环后添加:

    $result = array_values($result);
    
    推荐文章