需要在此循环中将常量更改为动态
Need to change the constant to dynamic in this loop
我是 运行 制造计划(使用 PHP 代码),但目前它是静态的(意味着我无法添加假期或我无法更改制造能力 - 当前制造能力是静态的,每天 1700 平方英尺)
请看下面代码
$max = 1700;
$dailyLeft = $max;
$current = reset($priorityArraySum);
$output = [];
//$day = date('Y-m-d');
$day = date('Y-m-d');
while (true) {
// echo $current."/".$dailyLeft."=".$day.PHP_EOL;
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;
}
}
}
echo '<pre/>';
print_r($output);
echo '<pre/>';
exit;
使用上面的代码,我可以安排我的制造计划,见下图
current schedule image
当前代码的问题是,我们有每天 1700 的静态容量,我们希望有动态容量,例如第 1 天 1700,第 2 天 1900,假期 0。
我们如何更改此代码以使其动态化?
目前我正在尝试下面的代码,但它不起作用
$today=date('Y-m-d');
$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'];
//$max = 1700;
$dailyLeft = $max;
$current = reset($priorityArraySum);
$output = [];
$day = date('Y-m-d');
while (true) {
//echo $dailyLeft."</br>";
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;
$qryDay=$day;
$pln_qry=mysql_query("select * from tbl_mfg_schedule where ms_date='".$qryDay."'") or die(mysql_error());
$pln_data=mysql_fetch_array($pln_qry);
if($pln_data['ms_po_sqft']==0)
{
$day=date('Y-m-d', strtotime($day. ' + 1 days'));
//continue;
}
else
{
$max = $pln_data['ms_po_sqft'];
$dailyLeft = $max;
}
}
else {
$output[] = ["priority" => key($priorityArraySum),
"amount" => $current,
"day" => $day
];
//$dailyLeft -= $current;
$qryDay=$day;
//$qryDay2=date('Y-m-d', strtotime($day. ' + 1 days'));
$pln_qry=mysql_query("select * from tbl_mfg_schedule where ms_date='".$qryDay."'") or die(mysql_error());
$pln_data=mysql_fetch_array($pln_qry);
if($pln_data['ms_po_sqft']==0)
{
$day=date('Y-m-d', strtotime($day. ' + 1 days'));
//continue;
}
else
{
$dailyLeft -= $current;
}
if ( ($current = next($priorityArraySum)) === false ) {
break;
}
}
}
这是基于您显示的第二个代码。一个问题是您总是将这一天向前推进,并且您应该只在 if()
的第一部分执行此操作,这是天容量已满的地方。
为了方便起见,我还循环检索了所有日期和容量,并将它们存储在以日期为键的数组中。
$today=date('Y-m-d');
$pln_qry=mysql_query("select *
from tbl_mfg_schedule
where ms_date > '".$today."'
order by ms_date") or die(mysql_error());
// Load list of days and production
$plnList = [];
while ( $pln_data=mysql_fetch_array($pln_qry) ) {
$plnList [ $pln_data['ms_date'] ] = $pln_data['ms_po_sqft'];
}
$current = reset($priorityArraySum);
$output = [];
$day = date('Y-m-d');
// Set max from production plan
$max = $plnList[ $day ];
//$max = 1700;
$dailyLeft = $max;
while (true) {
//echo $dailyLeft."</br>";
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;
// Move onto the next days capacity, if no specific value assume
// same as last ( ?? $max)
$max = $plnList[ $day ] ?? $max;
$dailyLeft = $max;
}
else {
$output[] = ["priority" => key($priorityArraySum),
"amount" => $current,
"day" => $day
];
$dailyLeft -= $current;
if ( ($current = next($priorityArraySum)) === false ) {
break;
}
}
}
echo '<pre/>';
print_r($output);
echo '<pre/>';
使用一些虚拟测试数据(注意缺少日期 2020-08-14
,因此假定它与 2020-08-13
...
相同
$priorityArraySum = [2000, 200, 6000, 1200];
$plnList = [ '2020-08-10' => 1700,
'2020-08-11' => 1700,
'2020-08-12' => 0,
'2020-08-13' => 500,
'2020-08-15' => 1700];
它产生...
<pre/>Array
(
[0] => Array
(
[priority] => 0
[amount] => 1700
[day] => 2020-08-10
)
[1] => Array
(
[priority] => 0
[amount] => 300
[day] => 2020-08-11
)
[2] => Array
(
[priority] => 1
[amount] => 200
[day] => 2020-08-11
)
[3] => Array
(
[priority] => 2
[amount] => 1200
[day] => 2020-08-11
)
[4] => Array
(
[priority] => 2
[amount] => 0
[day] => 2020-08-12
)
[5] => Array
(
[priority] => 2
[amount] => 500
[day] => 2020-08-13
)
[6] => Array
(
[priority] => 2
[amount] => 500
[day] => 2020-08-14
)
[7] => Array
(
[priority] => 2
[amount] => 1700
[day] => 2020-08-15
)
[8] => Array
(
[priority] => 2
[amount] => 1700
[day] => 2020-08-16
)
[9] => Array
(
[priority] => 2
[amount] => 400
[day] => 2020-08-17
)
[10] => Array
(
[priority] => 3
[amount] => 1200
[day] => 2020-08-17
)
)
我是 运行 制造计划(使用 PHP 代码),但目前它是静态的(意味着我无法添加假期或我无法更改制造能力 - 当前制造能力是静态的,每天 1700 平方英尺)
请看下面代码
$max = 1700;
$dailyLeft = $max;
$current = reset($priorityArraySum);
$output = [];
//$day = date('Y-m-d');
$day = date('Y-m-d');
while (true) {
// echo $current."/".$dailyLeft."=".$day.PHP_EOL;
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;
}
}
}
echo '<pre/>';
print_r($output);
echo '<pre/>';
exit;
使用上面的代码,我可以安排我的制造计划,见下图
current schedule image
当前代码的问题是,我们有每天 1700 的静态容量,我们希望有动态容量,例如第 1 天 1700,第 2 天 1900,假期 0。
我们如何更改此代码以使其动态化?
目前我正在尝试下面的代码,但它不起作用
$today=date('Y-m-d');
$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'];
//$max = 1700;
$dailyLeft = $max;
$current = reset($priorityArraySum);
$output = [];
$day = date('Y-m-d');
while (true) {
//echo $dailyLeft."</br>";
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;
$qryDay=$day;
$pln_qry=mysql_query("select * from tbl_mfg_schedule where ms_date='".$qryDay."'") or die(mysql_error());
$pln_data=mysql_fetch_array($pln_qry);
if($pln_data['ms_po_sqft']==0)
{
$day=date('Y-m-d', strtotime($day. ' + 1 days'));
//continue;
}
else
{
$max = $pln_data['ms_po_sqft'];
$dailyLeft = $max;
}
}
else {
$output[] = ["priority" => key($priorityArraySum),
"amount" => $current,
"day" => $day
];
//$dailyLeft -= $current;
$qryDay=$day;
//$qryDay2=date('Y-m-d', strtotime($day. ' + 1 days'));
$pln_qry=mysql_query("select * from tbl_mfg_schedule where ms_date='".$qryDay."'") or die(mysql_error());
$pln_data=mysql_fetch_array($pln_qry);
if($pln_data['ms_po_sqft']==0)
{
$day=date('Y-m-d', strtotime($day. ' + 1 days'));
//continue;
}
else
{
$dailyLeft -= $current;
}
if ( ($current = next($priorityArraySum)) === false ) {
break;
}
}
}
这是基于您显示的第二个代码。一个问题是您总是将这一天向前推进,并且您应该只在 if()
的第一部分执行此操作,这是天容量已满的地方。
为了方便起见,我还循环检索了所有日期和容量,并将它们存储在以日期为键的数组中。
$today=date('Y-m-d');
$pln_qry=mysql_query("select *
from tbl_mfg_schedule
where ms_date > '".$today."'
order by ms_date") or die(mysql_error());
// Load list of days and production
$plnList = [];
while ( $pln_data=mysql_fetch_array($pln_qry) ) {
$plnList [ $pln_data['ms_date'] ] = $pln_data['ms_po_sqft'];
}
$current = reset($priorityArraySum);
$output = [];
$day = date('Y-m-d');
// Set max from production plan
$max = $plnList[ $day ];
//$max = 1700;
$dailyLeft = $max;
while (true) {
//echo $dailyLeft."</br>";
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;
// Move onto the next days capacity, if no specific value assume
// same as last ( ?? $max)
$max = $plnList[ $day ] ?? $max;
$dailyLeft = $max;
}
else {
$output[] = ["priority" => key($priorityArraySum),
"amount" => $current,
"day" => $day
];
$dailyLeft -= $current;
if ( ($current = next($priorityArraySum)) === false ) {
break;
}
}
}
echo '<pre/>';
print_r($output);
echo '<pre/>';
使用一些虚拟测试数据(注意缺少日期 2020-08-14
,因此假定它与 2020-08-13
...
$priorityArraySum = [2000, 200, 6000, 1200];
$plnList = [ '2020-08-10' => 1700,
'2020-08-11' => 1700,
'2020-08-12' => 0,
'2020-08-13' => 500,
'2020-08-15' => 1700];
它产生...
<pre/>Array
(
[0] => Array
(
[priority] => 0
[amount] => 1700
[day] => 2020-08-10
)
[1] => Array
(
[priority] => 0
[amount] => 300
[day] => 2020-08-11
)
[2] => Array
(
[priority] => 1
[amount] => 200
[day] => 2020-08-11
)
[3] => Array
(
[priority] => 2
[amount] => 1200
[day] => 2020-08-11
)
[4] => Array
(
[priority] => 2
[amount] => 0
[day] => 2020-08-12
)
[5] => Array
(
[priority] => 2
[amount] => 500
[day] => 2020-08-13
)
[6] => Array
(
[priority] => 2
[amount] => 500
[day] => 2020-08-14
)
[7] => Array
(
[priority] => 2
[amount] => 1700
[day] => 2020-08-15
)
[8] => Array
(
[priority] => 2
[amount] => 1700
[day] => 2020-08-16
)
[9] => Array
(
[priority] => 2
[amount] => 400
[day] => 2020-08-17
)
[10] => Array
(
[priority] => 3
[amount] => 1200
[day] => 2020-08-17
)
)