2016-07-06 110 views
3

我試圖創建一個數組,簡要地給了我下面的:一個組成部分 減少和合並陣列

  • 標識的供應商,該組件的一部分
  • 體積斷點的

    • ID,和他們相關的單位成本

    我使用Laravel 5.2,雖然這是一個更一般的PHP問題。

    所以,我有一個數據庫表,看起來像這樣:

    sql screenshot

    我有一個函數,如下,以獲得部件的部分產品價格:

    public function get_component_prices() 
        { 
         $components = DB::table('component_supplier') 
          ->select('component_id', 'supplier_id', 'volume', 'unit_cost') 
          ->get(); 
    
         $prices = []; 
    
         foreach ($components as $component) { 
          array_push($prices, ["component_id" => $component->component_id, "supplier_id" => $component->supplier_id, "volumes" => [$component->volume => $component->unit_cost]]); 
         } 
    
         dd($prices); 
        } 
    

    這給了我陣列:

    array:7 [▼ 
        0 => array:3 [▼ 
        "component_id" => 3 
        "supplier_id" => 1 
        "volumes" => array:1 [▼ 
         100 => "1.5000" 
        ] 
        ] 
        1 => array:3 [▼ 
        "component_id" => 3 
        "supplier_id" => 1 
        "volumes" => array:1 [▼ 
         207 => "1.0100" 
        ] 
        ] 
        2 => array:3 [▼ 
        "component_id" => 3 
        "supplier_id" => 1 
        "volumes" => array:1 [▼ 
         500 => "0.8000" 
        ] 
        ] 
        3 => array:3 [▼ 
        "component_id" => 3 
        "supplier_id" => 1 
        "volumes" => array:1 [▼ 
         1000 => "0.4000" 
        ] 
        ] 
        4 => array:3 [▼ 
        "component_id" => 3 
        "supplier_id" => 2 
        "volumes" => array:1 [▼ 
         10000 => "0.2000" 
        ] 
        ] 
        5 => array:3 [▼ 
        "component_id" => 4 
        "supplier_id" => 2 
        "volumes" => array:1 [▼ 
         100 => "0.1000" 
        ] 
        ] 
        6 => array:3 [▼ 
        "component_id" => 4 
        "supplier_id" => 2 
        "volumes" => array:1 [▼ 
         500 => "0.0700" 
        ] 
        ] 
    ] 
    

    您可以看到某些供應商並且組件具有多個卷。

    因此,我想嘗試組排列好一點,合併重複的部分 - 也許像這樣,例如:

    6 => array:3 [▼ 
         "component_id" => 4 
         "supplier_id" => 2 
         "volumes" => array:3 [▼ 
          100 => "0.1000", 
          500 => "0.0700" 
         ] 
         ] 
    

    因此,對於每個COMPONENT_ID和supplier_id組,有一個一套'卷'。

    任何意見是非常讚賞......我一直在嘗試幾個小時,以獲得數組排序!

  • 回答

    1

    在MySQL中,你可以做這樣的事情

    SELECT component_id, supplier_id, 
         GROUP_CONCAT(volume, ':', unit_cost) AS volumes 
    FROM component_supplier 
    GROUP BY CONCAT(component_id, supplier_id) 
    

    http://sqlfiddle.com/#!9/cb7bb/1

    Output of the above query

    然後,您可以通過逗號在PHP簡單地循環這個查詢和爆炸卷場。