请原谅我缺乏专业知识,但我确实需要根据这个PHP代码的正确表述来选择你的大脑。
我有两行BASIC:
100 PITCHHOR=(LSLATHOR/(NRSLATVER+1)):LSLATHOR=PITCHHOR*(NRSLATVER+1)
110 IF PITCHHOR>72 THEN NRSLATVER=NRSLATVER+1:GOTO 100
我只需要把它放到PHP代码中,我理解它是脱离上下文但我只需要逻辑。发生了什么事情,它会调整第100行的PITCHHOR
和LSLATHOR
的调整。然后,如果PITCHHOR > 72
它调整NRSLATVER
并返回到第100行,它似乎循环直到满足条件PITCHHOR
小于72的值。我是对的?
对于这两行,PHP会是什么样的,我会使用while
循环吗?
我的尝试(可能犯错误)
<?php
$pitchhor = (floatval($lslathor) / (floatval($nrslatver) + 1));
$lslathor = (floatval($pitchhor) * (floatval($nrslatver) + 1));
while ($pitchhor > 72) {
$nrslatver += 1;
$pitchhor = (floatval($lslathor) / (floatval($nrslatver) + 1));
$lslathor = (floatval($pitchhor) * (floatval($nrslatver) + 1));
}
?>
我很感激你的帮助。
编辑1:
我做了一些小改动,尝试使用goto
,因为它是在PHP 5.3.0中引入的。
这个逻辑是否反映了BASIC代码?
recalc:
$pitchhor = (floatval($lslathor) / (floatval($nrslatver) + 1));
$lslathor = (floatval($pitchhor) * (floatval($nrslatver) + 1));
if ($pitchhor > 72) {
$nrslatver += 1;
goto recalc;
}
编辑2:
我最终使用了这个,感谢Richard Chambers(我添加了一个动态公差,而不是72的固定间距公差,这与旧BASIC程序中规定的规格有关):
do {
$pitch = ($length / ($slat_qty + 1));
$length = $pitch * ($slat_qty + 1);
if($pitch > $tolerance) {
++$slat_qty;
}
} while($pitch > $tolerance);
答案 0 :(得分:1)
BASIC源可以如下分析。这假设THEN子句的同一行上的多个语句是一个块的一部分,它似乎是旧式BASIC的标准。
100 PITCHHOR=(LSLATHOR/(NRSLATVER+1))
102 LSLATHOR=PITCHHOR*(NRSLATVER+1)
110 IF PITCHHOR>72 THEN
112 NRSLATVER=NRSLATVER+1
114 GOTO 100
116 END
我认为以下内容接近BASIC源代码。只要满足if语句条件,就可以继续循环。 goto语句没有什么错误可能是错误的根源。坦率地说,如果$pitchhor
没有收敛到小于72的值,则以下也可能是错误,因此线程最终会在无限循环中结束。
<?php
do {
$pitchhor = (floatval($lslathor) / (floatval($nrslatver) + 1));
$lslathor = (floatval($pitchhor) * (floatval($nrslatver) + 1));
if($pitchhor > 72) {
$nrslatver += 1;
}
} while ($pitchhor > 72);
?>