【问题标题】:php multidimensional array count duplicate values and add corresponding valuesphp多维数组计数重复值并添加对应值
【发布时间】:2019-10-04 14:58:09
【问题描述】:

我有一个php数组

Array
(
    [0] => Array
        (
            [location] => Kansas
            [kit] => Moving Kit
            [quantity] => 1
        )

[1] => Array
    (
        [location] => Louisiana
        [kit] => Anchored4Life DVD Kit
        [quantity] => 1
    )

[2] => Array
    (
        [location] => Louisiana
        [kit] => Anchored4Life DVD Kit
        [quantity] => 1
    )

[3] => Array
    (
        [location] => Louisiana
        [kit] => Anchored4Life DVD Kit
        [quantity] => 1
    )

[4] => Array
    (
        [location] => Pennsylvania
        [kit] => Anchored4Life DVD Kit
        [quantity] => 5
    )

[5] => Array
    (
        [location] => Pennsylvania
        [kit] => Welcome Kit
        [quantity] => 1
    )

)

我想对它进行排序,以便我根据位置和套件以及它们的数量和数量来接收数据,如果套件更薄的话。

Louisiana Anchored4Life DVD Kit 重复,所以我想知道每个州有多少套件订单,例如Louisiana Anchored4Life DVD Kit 数量 3。

我尝试过array_count_values(),但这仅根据字符串计算,我需要它,因为多个套件和套件未预定义。

【问题讨论】:

  • 那么你最终想要什么?你的问题不清楚。请正确分享预期结果

标签: php sorting multidimensional-array mapping


【解决方案1】:

您的问题根本不清楚。但是,我认为您想计算按产品分组的订单。我建议您创建一个非常简单的助手,例如:

    public function getCount($items, $kitName) : int
    {
        $count = 0;
        foreach ($items as $item) {
            if ($item['kit'] === $kitName) {
                $count ++;
            }
        }

        return $count;
    }

这个助手获取给定套件对应的订单数量

【讨论】:

    【解决方案2】:

    我本来打算继续发帖,但后来我看到了其他答案。

    您说的是现场分组,所以我认为这就是您所需要的:
    我在关联数组中对位置进行分组,然后对不同的试剂盒进行子阵列,如果试剂盒已经添加,我将数量相加。

    foreach($arr as $sub){
        if(!isset($res[$sub['location']])){
            $res[$sub['location']][$sub['kit']] = $sub;
        }elseif(!isset($res[$sub['location']][$sub['kit']])){
            $res[$sub['location']][$sub['kit']] = $sub;
        }else{
            $res[$sub['location']][$sub['kit']]['quantity'] += $sub['quantity'];
        }
    }
    
    var_dump($res);
    

    这会返回:

    array(3) {
      ["Kansas"]=>
      array(1) {
        ["Moving Kit"]=>
        array(3) {
          ["location"]=>
          string(6) "Kansas"
          ["kit"]=>
          string(10) "Moving Kit"
          ["quantity"]=>
          string(1) "1"
        }
      }
      ["Louisiana"]=>
      array(1) {
        ["Anchored4Life DVD Kit"]=>
        array(3) {
          ["location"]=>
          string(9) "Louisiana"
          ["kit"]=>
          string(21) "Anchored4Life DVD Kit"
          ["quantity"]=>
          int(3)
        }
      }
      ["Pennsylvania"]=>
      array(2) {
        ["Anchored4Life DVD Kit"]=>
        array(3) {
          ["location"]=>
          string(12) "Pennsylvania"
          ["kit"]=>
          string(21) "Anchored4Life DVD Kit"
          ["quantity"]=>
          string(1) "5"
        }
        ["Welcome Kit"]=>
        array(3) {
          ["location"]=>
          string(12) "Pennsylvania"
          ["kit"]=>
          string(11) "Welcome Kit"
          ["quantity"]=>
          string(1) "1"
        }
      }
    }
    

    https://3v4l.org/DgPKp

    【讨论】:

    • 感谢@Andreas,这正是我想要的
    猜你喜欢
    • 2022-01-12
    • 2021-12-10
    • 2015-06-04
    • 2020-06-10
    • 2017-11-16
    • 2014-01-31
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    相关资源
    最近更新 更多