首先感谢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 - 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,...)......
如果有人能够推动我,那就太好了。朝着正确的方向......
非常感谢你的时间,
里克
答案 0 :(得分:0)
试试这个希望它会帮助你。在此示例中,我使用了一个包含多个值的大数组,这些值将在product
和its color
上进行汇总。如果要检索quantity of P1 of black
的值,请使用我的代码,然后只需echo $result["P1,black"]["qty"];
<?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
我试图弄清楚获得上表结果的最简单方法是什么......