for循环中的If语句难以为SVG图生成适当的高度值

时间:2013-02-06 22:04:55

标签: php if-statement graph svg

重复上一篇文章,这次使用原始代码。

我正在创建一个SVG烛台图,但我无法生成合适的高度。

x值由开盘价决定。在某些情况下,收盘价比开盘价更高,因此需要相应调整头寸。

因为负值会产生错误,即根本没有矩形,我需要在开启结束价格之间取差异,并将此值添加到x位置。

这是我现在的代码。我将如何有效地执行此类调整?

我考虑过foreach语句,但我的PHP知识有限,而且我一直在遇到错误。

EDITED

X值递增。 Y值是开盘价。

    <?php

$open_price = array(5,10,15,20,25,30);
$closing_price = array (3,15,50,15,14);

$svg = '<svg id="main_graph" xmlns="http://www.w3.org/2000/svg" version="1.1" height="400" width="600" style="border:1px solid black;">';

$bars;

    for ($i=0, $count = count($open_price); $i<$count; $i++)

    {        
      $calculation = ($open_price[$i])-($closing_price[$i]);                    
      $bars .= '<rect x="'. $i * 5 . '" y="' . $open_price[$i] . '" width="20" height="' . $calculation . '" fill="blue"/>';                
    };

echo $graph = $svg . $bars . '</svg>';

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Crazy Bars</title>
    <style type="text/css">

        #main_graph {margin-left: 100px;}

    </style>


</head>
<body>    
</body>
</html>

1 个答案:

答案 0 :(得分:1)

您可能希望高度为收盘价和开盘价之差的absolute value。使用php的abs()函数来计算它。

$calculation = ($open_price[$i])-($closing_price[$i]); 
$abscalc = abs($calculation);

然后,如果您希望条形向下显示负价格变动,您也需要调整y值。

$y = $open_price[$i];
if ($calculation < 0) $y = $closing_price[$i];
$bars .= '<rect x="' . $i * 5 . '" y="'.$y.'" width="20" height="' . $abscalc . '" fill="blue"/>'; 

此代码将使您的x值保持不变,并使条形图显示价格范围。条形高度将是价格差异的绝对值,条形的y位置将是开盘价或收盘价的较低者。