我有一个分配给位置的拾取器阵列,可能有不同数量的拾取器。
['picker A'=>'location 1','picker B'=>'location 2','picker C' => 'location 2', 'picker D'=>'location 1']
以及一个可以在一个或多个位置包含产品的订单阵列。我已经通过循环浏览所有订单和产品并根据订单产品子阵列将它们排序到单独的位置,将订单产品排序到了单独的位置阵列中,这样一个订单可以存在于多个位置,但如果有意义的话,只包含该位置的产品。
位置1订单。。。
locatinOneOrders[0] => ['order_id','customer name','products'=>['array of products in location 1']
locatinOneOrders[1] => ['order_id','customer name','products'=>['array of products in location 1']
位置2订单。。
locatinTwoOrders[0] => ['order_id','customer name','products'=>['array of products in location 2']
locatinTwoOrders[1] => ['order_id','customer name','products'=>['array of products in location 2']
locatinTwoOrders[2] => ['order_id','customer name','products'=>['array of products in location 2']
locatinTwoOrders[3] => ['order_id','customer name','products'=>['array of products in location 1']
我需要做的是根据位置为每个拣选者分配相等或尽可能相等的订单数量。
因此,在上面的例子中,选取器A和选取器D应该各获得一个订单,选取器B和选取器C应该各获得2个订单,这需要适用于每个位置的任何数量的选取器和任何数量的订单。
使用array_chunk
可以像下面这样简单。
<?php
$pickers = ['picker A'=>'location 1','picker B'=>'location 2','picker C' => 'location 2', 'picker D'=>'location 1'];
$pickersByLocation = [];
foreach ($pickers as $k => $v) {
$pickersByLocation[$v][] = $k;
}
$locationOneOrders = array_fill(0, 101, 'This is an order'); //some dummy order data
$dividedOrdersLocationOne = array_chunk($locationOneOrders, count($locationOneOrders) / count($pickersByLocation['location 1']));
foreach ($pickersByLocation['location 1'] as $k => $v) {
echo "Picker {$v} assigned: n";
print_r($dividedOrdersLocationOne[$k]);
}
/*
Picker picker A assigned:
Array
(
[0] => This is an order
[1] => This is an order
...
Picker picker D assigned:
Array
(
[0] => This is an order
[1] => This is an order
...
如果数字是奇数,你可能会得到一个余数。按你喜欢的方式处理。