请原谅我缺乏专业知识,但我真的需要好好想想这个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);
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);
?>