【问题标题】:To Manage Schedule in PHP foreach loop在 PHP foreach 循环中管理计划
【发布时间】:2020-08-07 06:19:38
【问题描述】:

我有如下表

所以有优先级和平方英尺,我想开始制造计划(从当前日期开始),每天将处理 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;
                            }
                        }
                    
                    
                }

【问题讨论】:

  • 请将数据粘贴为数组值,而不是图片。
  • 什么不起作用?
  • @Epodax for 循环的逻辑不起作用,您可以看到它在优先级 2 之前运行良好,对于优先级 3,它只需要 282.59 平方英尺
  • 您的代码不会使用给定的输入数据产生您所说的结果。给我们一个合适的minimal reproducible example,包括代码形式的实际数据。

标签: php loops foreach logic


【解决方案1】:

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

【讨论】:

  • 如果我想让每日容量可变怎么办?比如 3 天,周末是 1700,其他几天是 0,它将是 2000。(我将为整个月的容量准备表格并将其存储)
  • 如果您想使容量可变,那么我建议发布一个新问题 - 以及您尝试使其正常工作。
  • 好的,@Nigel 一定会尽力而为,如果不成功,则会发布新问题。感谢您的宝贵时间
  • 我已尝试更改代码以使其动态化(请参阅原始问题,我已在下面添加了更改后的代码)但它不起作用,我们将不胜感激。
  • 另外,在这个链接上提出了单独的问题stackoverflow.com/questions/63297519/…
猜你喜欢
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
  • 2016-09-26
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多