代码之家  ›  专栏  ›  技术社区  ›  Zak

PHP不确定这种循环算法是否最有效

  •  0
  • Zak  · 技术社区  · 6 年前

    我有一个很有趣的小程序,但是我不确定嵌套循环是获得最终结果的最有效方法。

    我有以下数据:

      Name         qty       sub
    Widget_1   |   100   |   5   
    Widget_2   |   500   |   10
    Widget_3   |   1000  |   15
    

    我是什么 打算

    qty 然后除以 sub term . 所以我在数组中创建了另一个键:

    $widget_1['term] = $widget_1['qty'] / $widget_1['sub'];
    

    现在我有了

    Array
    (
        [0] => Array
            (
                [name] => Widget 1
                [qty] => 100
                [sub] => 5
                [term] => 20
            )
    
        [1] => Array
            (
                [name] => Widget 2
                [qty] => 500
                [sub] => 10
                [term] => 50
            )
    
        [2] => Array
            (
                [name] => Widget 3
                [qty] => 1000
                [sub] => 15
                [term] => 67 //Rounded from 66.6
            )
    
    )
    

    学期 ,添加 附属的 到下面 widget

    例如,在 $widget[0] 在任期内 属于 30 离开去 $widget[1] 以及 属于 300

    在那一点上,我认为 附属的 并将其添加到 ,有效减少剩余 学期 对于 widget[1] .

    $widget[1] 期限变成 20 --有效减少 实际的 任期至40年。

    然后在最后 学期 共40个——取 $widget[1] 并将其添加到 $widget[2]

    40年的任期已经过去了 $widget[2] 低于15分。制作 $widget[2]'s 数量 400英镑。我接受 的聚合 附属的 共15个,并将其添加到 的原始版本 赚30英镑。这个 更新 学期 对于 $widget[2] $widget[2] 实际的 全部的 54而不是67

    这是我的程序——运行它的命令行,它按预期运行——我只是好奇这是否是最佳实践,或者是否有更有效的使用 functions / loops ? 也许只有我一个人,但这感觉很“乱”。正在检查 数量 大于 小于0等。是否有更好的算法以更干净、更有效的格式获得相同的结果?

    <?php
    
    $widgets = array();
    
    $widgets[0]['name'] = 'Widget 1';
    $widgets[0]['qty'] = 100;
    $widgets[0]['sub'] = 5;
    $widgets[0]['term'] = $widgets[0]['qty'] / $widgets[0]['sub'];
    
    $widgets[1]['name'] = 'Widget 2';
    $widgets[1]['qty'] = 500;
    $widgets[1]['sub'] = 10;
    $widgets[1]['term'] = $widgets[1]['qty'] / $widgets[1]['sub'];
    
    $widgets[2]['name'] = 'Widget 3';
    $widgets[2]['qty'] = 1000;
    $widgets[2]['sub'] = 15;
    $widgets[2]['term'] = $widgets[2]['qty'] / $widgets[2]['sub'];
    
    $mySub = 0;
    $comp_term = 0;
    
    foreach ($widgets as $widget){
    
       $agregated_term = 0;
       $sub = $widget['sub'];
       $mySub = $mySub + $sub;
       $term = $widget['term'];
       $myQty = $widget['qty'];
    
        echo "##########################################################################\n";
        echo "Sub = " . $widget['sub'] . " | My Sub = $mySub | Term = $term  |  Previous Term = $comp_term\n";
        echo "##########################################################################\n";
    
       $agregated_term = 0;
    
       for ($x = 0; $x < $term; $x++) {
            $agregated_term++;
    
    
            if($myQty < $mySub && $myQty > 0){
                $myQty = $mySub;
            }
    
            if ($agregated_term < $comp_term){
                 if($myQty === 0){
                     break;
                 }
    
                 $myQty = $myQty - $sub;
                 echo "$agregated_term | $myQty\n";
             }else{
                 if($myQty === 0){
                     break;
                 }
    
                 $myQty = $myQty - $mySub;
                 echo "$agregated_term | $myQty -- agregated\n";
             }
    
        }
    
        $comp_term = $agregated_term;
    
    }
    
    ?>
    
    0 回复  |  直到 6 年前