在 PHP foreach 循环中管理计划

To Manage Schedule in PHP foreach loop

我有 table 如下所示

所以有优先级和平方英尺,我想开始制造计划(从当前日期开始),每天将处理 1700 平方英尺,如下图

但如您所见,它不起作用

我试过下面的代码

foreach($priorityArraySum as $key=>$val)
{
                    
   $totalDays=ceil($val/1700);
   $cutSQFT=$val;
                    
    for($j=1;$j<=$totalDays;$j++)
    {
        if($cutSQFT>1700)
        {
          echo '1700';
         $cutDate=date('Y-m-d', strtotime($cutDate. ' + 1 days'));
         $cutSQFT=$cutSQFT-1700;
        }
        else
        {
          echo $cutSQFT;
          $cutSQFT=$cutSQFT-$cutSQFT;
        }
    }

}

@Nigel,为了让它变得动态,我已经将代码更改为下面的代码,但它不起作用。

$pln_qry=mysql_query("select * from tbl_mfg_schedule where ms_date='".$today."'") or die(mysql_error());
                $pln_data=mysql_fetch_array($pln_qry);
                
                $max = $pln_data['ms_po_sqft'];
                $dailyLeft = $max;
                $current = reset($priorityArraySum);
                $output = [];
                //$day = date('Y-m-d');
                $day = date('Y-m-d');
                while (true)    {
                    
                    $pln_qry=mysql_query("select * from tbl_mfg_schedule where ms_date='".$today."'") or die(mysql_error());
                    $pln_data=mysql_fetch_array($pln_qry);
                
                    $max = $pln_data['ms_po_sqft'];
                
                        if ( $current >= $dailyLeft )   {
                            //$day=date('Y-m-d', strtotime($day. ' + 1 days'));
                            $output[] = ["priority" => key($priorityArraySum),
                                    "amount" => $dailyLeft,
                                    "day" => $day
                            ];
                            $day=date('Y-m-d', strtotime($day. ' + 1 days'));
                            $current -= $dailyLeft;
                            $dailyLeft = $max;
                        }
                        else    {
                            $output[] = ["priority" => key($priorityArraySum),
                                    "amount" => $current,
                                    "day" => $day
                            ];
                            $dailyLeft -= $current;
                            if ( ($current = next($priorityArraySum)) === false )   {
                                break;
                            }
                        }
                    
                    
                }

此代码使用 while() 循环来创建工作日的输出数组。它使用 $current 来跟踪每个项目以及剩余的分配量。它还使用 $dailyLeft 来跟踪特定日期剩余的容量。它会检查两者,如果当前容量小于剩余的每日容量,则会为该项目分配一整天并重置每日容量。如果那天有额外的容量,它会将这个项目分配给当天并获取下一个项目。

只有当一​​天的容量被填满时,这一天才会增加(使用$day++)...

$max = 1700;
$dailyLeft = $max;
$current = reset($priorityArraySum);
$output = [];
$day = 1;
while (true)    {
    // echo $current."/".$dailyLeft."=".$day.PHP_EOL;
    if ( $current >= $dailyLeft )   {
        $output[] = ["priority" => key($priorityArraySum),
                "amount" => $dailyLeft,
                "day" => $day++
        ];
        $current -= $dailyLeft;
        $dailyLeft = $max;
    }
    else    {
        $output[] = ["priority" => key($priorityArraySum),
                "amount" => $current,
                "day" => $day
        ];
        $dailyLeft -= $current;
        if ( ($current = next($priorityArraySum)) === false )   {
            break;
        }
    }
}
print_r($output);