Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环和组合产品的最佳方式_Javascript_Arrays_Web_Foreach_Cgi - Fatal编程技术网

Javascript 循环和组合产品的最佳方式

Javascript 循环和组合产品的最佳方式,javascript,arrays,web,foreach,cgi,Javascript,Arrays,Web,Foreach,Cgi,我在寻找你个人对最好的方法的想法,因为我可以看到很多方法达到同样的目的 我有一个店面,有多本不同的小册子,可以任意组合订购 每个小册子项目在数据库中都有长x宽x高和重量。它们都是相同的长x宽,只是厚度和重量不同 我还有一套最大盒子尺寸 我知道我可以在最大的盒子里放10.5的高度 我可以把这些书组合起来装运。所以我想把盒子填到我能填到的最大值,然后重复,直到我只有一个部分盒子 我需要的最终结果是每个盒子及其重量的数组 例如: 订购的物品 第1册100页,厚度0.05,重量0.15 第二册200页,

我在寻找你个人对最好的方法的想法,因为我可以看到很多方法达到同样的目的

我有一个店面,有多本不同的小册子,可以任意组合订购

每个小册子项目在数据库中都有长x宽x高和重量。它们都是相同的长x宽,只是厚度和重量不同

我还有一套最大盒子尺寸

我知道我可以在最大的盒子里放10.5的高度

我可以把这些书组合起来装运。所以我想把盒子填到我能填到的最大值,然后重复,直到我只有一个部分盒子

我需要的最终结果是每个盒子及其重量的数组

例如:

订购的物品

  • 第1册100页,厚度0.05,重量0.15
  • 第二册200页,厚0.07,重0.23
  • 高度

  • 100*.05=5
  • 200*.07=14
  • 权重

  • 100*.15=15
  • 200*.23=46
  • 方框1包含

  • 第二册第150页
  • 高度:150*.07=10.5
  • 重量:150*.23=34.5
  • 方框2包含

  • 第2册50和第1册100
  • 高度:(100*.05)+(50*.07)=8.5
  • 重量:(100*.15)+(50*.25)=27.5
  • 您将如何循环信息以获得输出? 从一个产品开始,计算高度,将其划分为完整的箱子,计算这些箱子的重量,并将每个完整的箱子添加到阵列中,计算部分箱子的高度,然后继续下一个产品?或者

    静态编码将是“容易的”,但我正在尝试动态编码,这样我就不必每次添加新产品时都返回

    -编辑-

    这是我当前的循环,但这只是将数量相加并划分为几个方框。目前的产品都是相同的尺寸/形状,所以这在当时很好用

    if($zip\u code!='')
    {
    我的$item\u list=enc\u sql\u select\u multi(“从`$PREF{shopping\u carts\u table}`中选择*,其中`'cart\u id`='$cart\u id'和`'salled`='0'以及`从`购物车`='0'中删除');
    我的$item_数量='0';
    foreach my$k(排序{$a$b}键%$item_列表)
    {
    $item_数量=~s/,//g;
    my$item_id=$$item_list{$k}{id};
    my$item_qty_new=$$item_list{$k}{option1value};
    $item\u qty\u new=~s/,//g;
    $item\u quantity=$item\u quantity+$item\u quantity\u new;
    }
    如果($item\u qty!=“0”)
    {
    $item_数量=~s/,//g;
    如果($项目数量==25)
    {
    我的$tempCount=$carton_specs{25}{boxNo};
    $tempCount++;
    $carton_specs{25}{boxNo}=$tempCount;
    }
    elsif(项目数量=50)
    {
    我的$tempCount=$carton_specs{50}{boxNo};
    $tempCount++;
    $carton_specs{50}{boxNo}=$tempCount;
    }
    elsif(项目数量=100)
    {
    我的$tempCount=$carton_specs{100}{boxNo};
    $tempCount++;
    $carton_specs{100}{boxNo}=$tempCount;
    }
    elsif($item_数量>100&$item_数量<5000)
    {
    我的$fullBoxCt=int($item_数量/200);
    my$tempCountFull=$carton_specs{200}{boxNo};
    $tempCountFull=$tempCountFull+$fullBoxCt;
    $carton_specs{200}{boxNo}=$tempCountFull;
    my$partBoxQty=$item\u qty-(200*$fullBoxCt);
    如果($partBoxQty!=0)
    {
    my$tempCountPart=$carton_specs{$partBoxQty}{boxNo};
    $tempCountPart++;
    $carton_specs{$partBoxQty}{boxNo}=$tempCountPart;
    }
    }
    其他的
    {
    @船舶详情=
    (
    {
    代码=>1000,
    价格=>'0.00'
    },
    {
    代码=>1500,
    价格=>'0.00'
    }
    );
    退货(@shipDetails);
    }
    }
    
    这是一个很好的例子。最好的算法是。如果这对于你拥有的数据量来说太慢,那么有各种算法可以更快地提供很好的近似答案。

    这是装箱问题的一个经典例子,虽然我也不是数学家,但很多人都给出了答案这是一个相当重要的想法。因此:

    对于这个问题,没有已知的最佳解决方案可以在多项式时间内计算出来,而且您的输入量可能相当大。因此,您应该采用以下启发式方法之一:

  • 首次拟合算法
    :逐个处理小册子,将其放入第一个容量足以容纳小册子的盒子中。如果没有这样的盒子,则必须启动一个新盒子,并将其添加到可用盒子列表中
  • 最佳匹配算法
    :逐个处理小册子,将其放入最紧(剩余容量最小)的盒子中。如果没有盒子可以容纳小册子,则必须启动新盒子并将其添加到可用盒子列表中
  • 第一次拟合递减算法
    :首先通过降低高度对小册子进行排序,然后执行第一次拟合算法。在您的示例中,您将首先打包“Book 2”小册子
  • 最佳拟合递减算法
    :首先通过降低高度对小册子进行排序,然后执行最佳拟合算法
  • 但是