循环遍历有限制的数组



我有一个传输阵列:

$transports = [
0 => ['label' => 'Transport 1', 'maxPalettesToLoad' => 5],
1 => ['label' => 'Transport 2', 'maxPalettesToLoad' => 2]
];

以及带有我想要的某些产品的调色板阵列;负载";在上方的运输上

$palettes = [
0 => ['id_product' => 2, 'id_sale_order_item' => 1, 'amount' => 4],
1 => ['id_product' => 4, 'id_sale_order_item' => 4, 'amount' => 3]
];

我正在努力完成的是将所有调色板加载到传输上,其中加载的调色板总数等于每个传输的maxPalettesToLoad参数。我正在寻找一个解决方案,将产生我的价值,如:

$toret = [
'Transport 1' => [
0 => ['id_product' => 2, 'id_sale_order_item' => 1],
1 => ['id_product' => 2, 'id_sale_order_item' => 1],
2 => ['id_product' => 2, 'id_sale_order_item' => 1],
3 => ['id_product' => 2, 'id_sale_order_item' => 1],
4 => ['id_product' => 4, 'id_sale_order_item' => 4]
],
'Transport 2' => [
0 => ['id_product' => 4, 'id_sale_order_item' => 4],
1 => ['id_product' => 4, 'id_sale_order_item' => 4]
],
];

编辑:这是我的尝试。它在数据结构方面有点不同,因为我简化了它,使其缩短了

foreach ($transportsData as $transportData) {
$modelTransportOrder = new TransportOrder();
$modelTransportOrder->max_palettes_amount = $maxPalettesAmount;
$status &= $modelTransportOrder->save();
$amountAssigned = $transportData['palletes'];
if ($status) {
$j = 1;
foreach ($palettesData as $paletteData) {
if ($modelSaleOrderItem = SaleOrderItem::findOne([$paletteData['id_sale_order_item']])) {
for ($i = 0; $i < $paletteData['amount']; $i++) {
if ($j <= $amountAssigned) {
$modelTransportOrderItem = new TransportOrderItem();
$modelTransportOrderItem->id_transport_order = $modelTransportOrder->id;
$modelTransportOrderItem->id_product = $modelSaleOrderItem->id_product;
$modelTransportOrderItem->id_sale_order_item = $modelSaleOrderItem->id;
$modelTransportOrderItem->index = $j;
$status &= $modelTransportOrderItem->save();
// Index reset
if ($j == $amountAssigned) {
$j = 0;
break;
}
}
$j++;
}
} else {
$status = false;
}
}
} else {
// Zapis transportu nie powiódł się
}
}

在每次使用调色板后,我都设法使用unset解决了我的问题:

foreach ($initedPalettes as $key => $palette) {
if ($i <= $amountAssigned) {
$modelsTransportOrderItem = self::createTransportOrderItem
(
$modelTransportOrder->id,
$palette['idProduct'],
$palette['idSaleOrderItem'],
$i
);
$status &= $modelsTransportOrderItem->save();
unset($initedPalettes[$key]);
$i++;
}
}

最新更新