几种组合的PHP总和循环结果

时间:2017-04-14 03:39:23

标签: php oop

首先感谢Stackoverflow社区提供的所有好答案。 我一直设法在这里找到答案。这一次似乎有点不同 因为经过几天的搜索我找不到答案。可能是因为 我不知道如何正确地提出这个具体案例的问题!?

案例:

来自mysql表的PHP循环结果:

          array {
               [0]=>
                   ["productName"]=> P1
                   ["qty"]=> 1
                   ["color"]=> black
                }
               [1]=>
                   ["productName"]=> P1
                   ["qty"]=> 1
                   ["color"]=> red
                }
               [2]=>
                   ["productName"]=> P2
                   ["qty"]=> 1
                   ["color"]=> blue
                 }
               [3]=>
                   ["productName"]=> P3
                   ["qty"]=> 1
                   ["color"]=> black
                 }
               [4]=>
                   ["productName"]=> P3
                   ["qty"]=> 1
                   ["color"]=> red
                 }
               [5]=>
                   ["productName"]=> P2
                   ["qty"]=> 1
                   ["color"]=> green
                }
             .....more and more.....
            }
  • 产品P1,P2,P3,P4可以是黑色,红色,绿色或蓝色。
  • 我们在下面提供了所有可能的组合:

        P1 - black, P1 - red, P1 - green, P1 - blue.
    
        P2 - black, P2 - red, P2 - green, P2 - blue.
    
        P3 - black, P3 - red, P3 - green, P3 - blue.
    
        P4 - black, P4 - red, P4 - green, P4 - blue.
    

问题:如何获得每种组合的总金额?

我们可以使用下面的代码来获得结果,但是当然你必须为每个组合编写相同的代码。它没有意义....想象100个产品或更多......

$sumP1Black = 0;

foreach ($dao->getArticles() as $value) {

        if(($value->productName == 'P1') && ($value->color == 'black')) {       
        $total = $value->qty;
        $sumP1Black += $total;
        }   
}

print_r($sumP1Black);   

我想知道如何正确编码这个特定情况。 我没有在此示例中包含它,但您也可以添加上面的示例产品大小(XL,L,M,...)......

如果有人能够推动我,那就太好了。朝着正确的方向......

非常感谢你的时间,

里克

2 个答案:

答案 0 :(得分:0)

试试这个希望它会帮助你。在此示例中,我使用了一个包含多个值的大数组,这些值将在productits color上进行汇总。如果要检索quantity of P1 of black的值,请使用我的代码,然后只需echo $result["P1,black"]["qty"];

PHP code demo

<?php
$array=array (
               0 => array(
                   "productName"=> "P1",
                   "qty"=> 1,
                   "color"=> "black"
                ),
               9 => array(
                   "productName"=> "P1",
                   "qty"=> 1,
                   "color"=> "black"
                ),
               1 => array(
                   "productName"=> "P1",
                   "qty"=> 1,
                   "color"=> "red"
                ),
               11 => array(
                   "productName"=> "P1",
                   "qty"=> 8,
                   "color"=> "red"
                ),
               2 => array(
                   "productName"=> "P2",
                   "qty"=> 1,
                   "color"=> "blue",
                 ),
               3 => array(
                   "productName"=> "P3",
                   "qty"=> 1,
                   "color"=> "black",
                 ),
               4 => array(
                   "productName"=> "P3",
                   "qty"=> 1,
                   "color"=> "red",
                 ),
               5 => array(
                   "productName"=> "P2",
                   "qty"=> 1,
                   "color"=> "green",
                ),
               6 => array(
                   "productName"=> "P2",
                   "qty"=> 1,
                   "color"=> "green",
                )
);
$result=array();
foreach($array as $key => $value)
{
    $productName=$value["productName"];
    $color=$value["color"];
    $key=$productName.",".$color;//creating key combinations to make data accessible with given specified requirement
    if(isset($result[$key]))
    {
        $result[$key]["qty"]+=$value["qty"];
    }
    else
    {
        $result[$key]=$value;
    }
}
print_r($result);

答案 1 :(得分:0)

感谢Sahil的回答。

我刚刚在他的代码中添加了大小:

foreach($dao->getArticles() as $value) {
   $productName = $value->productName;
   $color = $value->color;
   $size = $value->size;
   $key = $productName" - ".$color." - ".$size; //creating key combinations to make data accessible with given specified requirement

   if(isset($result[$key])) {
       $result[$key]->quantite += $value->quantite; 
      }else{
    $result[$key]= $value;
    }
}
print_r($result);

结果可以在屏幕上打印如下:   组合 - 数量

P1 - 黑色 - XL - &gt;数量

P1 - 黑色 - L - &gt;数量

......越来越多......

出于输出目的,下面的表可能是用户的更好选择:

          Qties     XL  L   M   S   Total 
        P1 - Black  5   2   2   1   10
        P1 - Green  4   1   3   2   10
         P1 - Red   1   2   2   3   8
       P1 - Blue    2   5   3   6   16
     P2 - Black     1   4   2   7   14
     P2 - Green     3   3   2   1   9
        P2 - Red    1   6   1   2   10
      P2 - Blue     2   7   1   8   18
     P3 - Black     1   4   1   2   8
     P3 - Green     2   3   1   4   10
        P3 - Red    4   4   1   1   10
      P3 - Blue     6   2   4   2   14
     P4 - Black     7   3   2   5   17
     P4 - Green     8   2   9   2   21
        P4 - Red    9   2   1   1   13
       P4 - Blue    2   1   2   1   6
       Total        58  51  37  48  194

我试图弄清楚获得上表结果的最简单方法是什么......