变量不在PHP循环中传递/更新

时间:2013-01-28 23:00:07

标签: php

所以基本上我正在做的是创建php脚本,它打印一个表并更新并根据输入到表单中的内容计算值。

所以我有一个单独的HTML文件,其中包含传递3个变量的表单:

$tempStart
$tempEnd
$windSpeed

然后我创建了一个函数,在表的每个字段中使用如下:

        function windChillCalc(&$Twc, $Temp, $Wind)
        {
    $Twc = 13.12 + 0.6215*$Temp - (11.37*(pow($Wind, 0.16))) + (0.3965*$Temp*(pow($Wind, 0.16)));

        }

完整的脚本如下:

<?php

function windChillCalc(&$Twc, $Temp, $Wind)
{
    $Twc = 13.12 + 0.6215*$Temp - (11.37*(pow($Wind, 0.16))) + (0.3965*$Temp*(pow($Wind, 0.16)));

}

?>

<html>
<head>
<title>Wind Chill Temperature Table</title>
</head>
<?php

extract($_REQUEST);


print "<h1>Wind Chill Temperature Table</h1>";

if(!empty($tempStart)   &&  !empty($tempEnd)  &&  !empty($windSpeed))
    {
        print "<h3>Air Temperature from: ".$tempStart."&degC to ".$tempEnd."&degC</h3>";
        print "<h3>For Wind Speed from 7 km/h to ".$windSpeed." km/h</h3>";
        }
        else
            print "<h2>Air Temperature START is not numeric</h2><br />";


$tablecolor="white";
$headercolor="#00ffff";
$windcolor="red";
$tempcolor="yellow";
$cTemp=$tempStart;
$cWindSpeed="7";
windChillCalc($Twc,$cTemp,$cWindSpeed);

print "<table border=1><tr>";
print "<th width=275 bgcolor=$headercolor>Wind Speed (km/h)/Air Temp.</th>";

    for ($cTemp = $tempStart; $cTemp < $tempEnd; $cTemp+=5){
        print "<th width=100 bgcolor=$headercolor>$cTemp</th>";
    }
    if ($cTemp != $tempEnd){
        print "<th width=100 bgcolor=$headercolor>$tempEnd</th></tr>";

        $cTemp = $tempStart;
    }   


for ($cWindSpeed = 7; $cWindSpeed < $windSpeed; $cWindSpeed+=0.5){

    print  "<tr>";

print  "<td align=center bgcolor=$windcolor>$cWindSpeed</td>";

    for ($cTemp = $tempStart; $cTemp < $tempEnd; $cTemp+=5)   {
        print  "<td align=center bgcolor=$tempcolor>$Twc</td>";
    }
    if ($cTemp != $tempEnd){
        print "$<td align=center bgcolor=$tempcolor>$Twc</tb></tr>";
        $cTemp = $tempStart;
    }   
}
    if ($cWindSpeed != $windSpeed){
        print "<td align=center bgcolor=$windcolor>$windSpeed</td>";
        for ($cTemp = $tempStart; $cTemp < $tempEnd; $cTemp+=5)   {
        print  "<td align=center bgcolor=$tempcolor>$Twc</td>";
    }
    if ($cTemp != $tempEnd){
        print "$<td align=center bgcolor=$tempcolor>$Twc</tb></tr>";
        $cTemp = $tempStart;
    }   

    }   


print "</tr>";
print "</table>";



?>
</body>
</html>

最终会发生什么,它会创建一个如下所示的表:

http://i.stack.imgur.com/Iv00i.png

标题和最左边的列是正确的,但它似乎只计算具有相同变量集的黄色单元格。它不会根据标题中的内容更新变量,而是将最左侧的列更新为公式。

所以基本上,每个黄色单元格都使用以下公式计算:

$Wind = 7
$Temp = -5

请帮帮我们!我需要在接下来的几个小时内解决这个问题,这是我最后的希望。谢谢!

2 个答案:

答案 0 :(得分:1)

好吧,你只是在循环之前调用你的函数一次,并在每个表格单元格中打印相同的结果。

你应该用你想要打印的实际变量调用你的函数。

我还会从函数中返回计算出的值,而不是通过引用传递它,这使得它更清晰,更符合逻辑(对我来说至少......)。

答案 1 :(得分:1)

你的功能并没有真正起作用。变量$ Twc仅存在于您的函数中,并且只存在一次。您需要使用不同的数据多次运行该函数以获得不同的结果,并且每次都需要获取函数的变量OUT(通过返回)。

function windChillCalc($Twc, $Temp, $Wind){
         $Twc = 13.12 + 0.6215*$Temp - (11.37*(pow($Wind, 0.16))) + (0.3965*$Temp*(pow($Wind,0.16)));
return $Twc
}

并且

$Twc = windChillCalc($Twc,$cTemp,$cWindSpeed); 
当你需要获得结果时,在你的for循环中

Recommended Reading.