为了账号安全,请及时绑定邮箱和手机立即绑定

在 PHP foreach 循环中管理计划

在 PHP foreach 循环中管理计划

PHP
长风秋雁 2023-09-22 14:35:30
我有如下表所以有优先级和平方英尺,我想开始制造计划(从当前日期开始),每天将处理 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;                        }
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

此代码使用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);


查看完整回答
反对 回复 2023-09-22
  • 1 回答
  • 0 关注
  • 78 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号