包裹每包最大重量为30公斤

时间:2018-02-14 08:50:59

标签: php

三部分总重量50kg

每包最大重量的包裹为30 kg

汽车尾气重量为:20KG - 总量2 = 40KG

汽车交流发电机重量为:10KG - 总量1 = 10KG

所以这需要两个地块

  • 包裹最大重量30千克包裹1 - 汽车排气&交流发电机(第一个包裹将需要1个排气20KG和1个交流发电机10KG来制造30KG)

  • 包裹最大重量30公斤包裹2 - 汽车排气(第二个包裹将需要1排气20KG)

显示如下:

包裹编号||零件名称||零件数量||重量

1 ||汽车排气|| 1 || 20KG

1 ||交流发电机|| 1 || 10KG

2 ||汽车排气|| 1 || 20KG

需要php脚本这样显示

(评论/回答的代码)......

$nums = array( 20, 20, 10 );

    sort($nums);
    $i=0;
    while($i<sizeof($nums)){
        $b=3;
        for ($k=1; $k < $b; $k++) { 
            dump($k);
        }
        die();
        $a = $nums[$i]+$nums[$i+1]+$nums[$i+2];
        if($a=30)
        {
            dump($a);
        }
        die();
        dump($i);
        if($i>=sizeof($nums)){

            break;
        }
        echo "<br>";
        $i=$i+1;
    }

1 个答案:

答案 0 :(得分:0)

这应该有效,你必须尝试确保,但代码中有评论可以告诉你它是如何工作的......

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$parts = [ [ 'desc' => 'Exhaust', 'weight' =>20],
    ['desc' => 'Car Exhaust2', 'weight' => 20],
    ['desc' => 'Alternator', 'weight' => 10]
];
$maxWeight = 30;
$parcels = [];

// Create first parcel
$parcels[] = ['weight' => 0, 'items' => []];
foreach ( $parts as $item ) {
    $added = false;
    // Look through all existing parcels
    foreach ( $parcels as &$parcel ) {
        // If there is enough space for this item - add to parcel
        if ( $parcel['weight'] + $item['weight'] <= $maxWeight ) {
            $parcel['weight'] += $item['weight'];
            $parcel['items'][] = $item;
            $added = true;
            break;
        }
    }
    // If there wasn't enough space in existing parcels, create a new one
    if ( $added == false )  {
        $parcels[] = ['weight' => $item['weight'], 'items' => [$item]];
    }
}

print_r($parcels);

我已经扩展了项目数组以获得描述和权重,然后每个包裹都有其中项目的总权重和项目列表。

最大重量是一个变量,所以可以很容易地改变。

您需要尝试使用不同的项目,但它的功能相当简单。