我有一个页面显示条形图,值可以从微小范围(0到30)到大范围(0到10000)不等。
我的问题是在具有最大高度的div中显示它,在我的情况下,条形不能超过90px。
一个例子:
知道最大高度是90px,我想做的是检查哪个是最高栏(意味着这个是100%),然后其他是百分比那个。通过这种方式,我可以控制每个高度(最大值为90px),并保持在高度的限制范围内。
到目前为止我的代码:(此代码中的值与上图不相关)
$limitedHeight = 90;
$bar1 = 300;
$bar2 = 700;
$bar3 = 150;
$biggestBar = max(array($bar1, $bar2, $bar3));
//knowing this, I will force each bar to the limited height:
//first, for each, get the percentage:
$bar1Percent = intval(($bar1 * 100) / $biggestBar);
$bar2Percent = intval(($bar2 * 100) / $biggestBar);
$bar3Percent = intval(($bar3 * 100) / $biggestBar);
//then, force the new heights:
$bar1Height = intval(($bar1Percent * $limitedHeight) / 100);
$bar2Height = intval(($bar2Percent * $limitedHeight) / 100);
$bar3Height = intval(($bar3Percent * $limitedHeight) / 100);
//place the height into the bars:
echo '<div class="bar1" style="height: ' . $bar1Height . 'px"></div>
<div class="bar2" style="height: ' . $bar2Height . 'px"></div>
<div class="bar3" style="height: ' . $bar3Height . 'px"></div>';
我的问题:
这是正确的做法吗? 或者有没有人有更好的解决方案?
(这个解决方案可能有一个问题:如果条形“A”只是“10”,条形“B”是“1000”,计算的(有限的)高度将有很大的差异,但我想它是什么它是,这个比例得到尊重)。
答案 0 :(得分:1)
您可以计算应用于所有条形的单个比例因子:
$scale = $limitedHeight / $biggestBar;
$bar1Height = intval($bar1 * $scale);
$bar2Height = intval($bar2 * $scale);
$bar3Height = intval($bar3 * $scale);
这只会简化你的计算,但整体方法看似合理。当你使用线性刻度时,巨大高度差的问题是不可避免的。