php多维数组计数重复值并添加对应值

Posted

技术标签:

【中文标题】php多维数组计数重复值并添加对应值【英文标题】:php multidimensional array count duplicate values and add corresponding values 【发布时间】: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(),但这仅根据字符串计算,我需要它,因为多个套件和套件未预定义。

【问题讨论】:

那么你最终想要什么?你的问题不清楚。请正确分享预期结果 【参考方案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,这正是我想要的

以上是关于php多维数组计数重复值并添加对应值的主要内容,如果未能解决你的问题,请参考以下文章

未设置值空数组多维php [重复]

如果两个值匹配,则从 php 中的多维关联数组中删除重复项

PHP按多维数组中的值排序[重复]

从php中的多维数组中删除重复值

如何从 PHP 中的多维数组中删除重复值 [重复]

PHP:计算并显示多维数组的值[重复]