减少和组合数组

时间:2016-07-06 15:42:49

标签: php mysql laravel

我正在尝试创建一个简洁地给我以下内容的数组:

  • 组件的ID
  • 该组成部分的供应商的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 个答案:

答案 0 :(得分:1)

在Mysql中,你可以做这样的事情

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

Output of the above query

{{3}}

然后你可以简单地在PHP中循环这个查询并用逗号分解卷字段。