2017-04-14 28 views
0

首先非常感謝所有好的答案Stackoverflow社區提供。 我一直設法在這裏找到答案。這一次似乎有點不同 ,因爲經過幾天的搜索,我找不到答案。可能是因爲 我不知道如何正確地問這個具體案例的問題!?PHP總和循環結果幾個組合

案例:

從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,...)...

這將是偉大的如果有人可以「推我」在正確的方向...

非常感謝您的時間,

裏克

回答

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); 
+0

非常感謝薩赫勒。它確實有幫助。根據你的建議,我已經在$ key中添加了以上答案中產品的尺寸... – Ric

+0

@Ric我希望你能接受我的回答....並且歡迎...... :) –

0

感謝薩赫勒您有用的答案。

我剛添加的大小,以他的代碼:

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 - >數量

P1 - 黑色 - L - >數量

......越來越.....

對於輸出一個表,像下面可能對用戶更好的選擇:

  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 

我試圖找出是什麼讓上表中結果最簡單的方法...