我无法解决如何表达这一点的问题。
我有100和420作为我希望获得的最小值和最大值。
假设我有:
1000
4534
34566
123145
12312265
现在,我该怎么说:
取4534并知道1000 = 420和12312265 = 100确定4534值。
为了更清楚,我试图用正方形表示网页排名,所以如果排名为1,它应该被翻译成我的最大值/大小420,但是如果页面排名低于受欢迎程度,比如13000然后它大小应该接近最小值100.我知道所有的值。
谢谢。
我仍然无法搞清楚这一点。
到目前为止,我使用了第一个答案中的代码:
$srcmin=1185;
$srcmax=25791525;
$destmin=100;
$destmax=420;
$pos = (($RANK - $srcmin) / ($srcmax-$srcmin)) ;
$rescaled = ($pos * ($destmax-$destmin)) + $destmin;*/
$percentage = (($RANK - $MIN) * 100) / $MAX;
$SIZE = (($percentage / 320) * 100) + 100
$ RANK我的网页排名和$ SIZE值我需要相应地调整它们的大小。这不起作用(我的错误毫无疑问)我从$ SIZE得到的只有100个。
答案 0 :(得分:6)
这应该说明......
$values=array(1000, 4534, 34566, 123145, 12312265);
$srcmin=$values[0];
$srcmax=$values[count($values)-1];
$destmin=420;
$destmax=100;
foreach($values as $x)
{
//how far in the source range is $x (0..1)
$pos = (($x - $srcmin) / ($srcmax-$srcmin))
//figure out where that puts us in the destination range
$rescaled = ($pos * ($destmax-$destmin)) + $destmin;
}
你想知道每个数字的源范围有多远,这就是$ pos值给你的。鉴于此,您可以将其转换为您到目的地范围的距离。
答案 1 :(得分:1)
我认为你的意思是
$min=100;
$max=420;
$range = $max - $min;
$nums = [10,15,20,25,30]; // Edit this as you please
$relMin = min($nums);
$relMax = max($nums);
$relRange = $relMax - $relMin;
foreach($nums as $num)
{
$pct = ($num - $relMin)/$relRange;
echo "$num is %$pct between $relMin and $relMax";
$val = $pct*$range + $min;
echo "$pct of the range between $min and $max is $val";
}
答案 2 :(得分:1)
您需要做的是
(1)在值范围内找到每个值的[0..1]位置,1000表示x = 0,123145表示x = 1;
(2)将其反转,因为您希望最小的数字具有最大宽度(x = 1-x)
(3)将该数字[0..1]转换为您想要的宽度范围。
$values = array(1000, 4534, 34566, 123145);
$minV = min($values);
$maxV = max($values);
$minW = 100;
$maxW = 420;
foreach($values as $v)
{
$width = $minW + ($maxW - $minW) * (1 - (($v - $minV) / ($maxV - $minV)));
echo "<div style='width:".$width."px;background-color:red;padding:5px;'></div>";
}
或者您可以在函数中概括它:
function invTranslate($value)
{
$min1 = 1000;
$max1 = 123145;
$min2 = 100;
$max2 = 420;
return $min2 + ($max2 - $min2) * (1 - (($value - $min1) / ($max1 - $min1)));
}
并使用它:
<div style="width:<?=invTranslate(5000)?>px"></div>
<div style="width:<?=invTranslate(100000)?>px"></div>
<div style="width:<?=invTranslate(90000)?>px"></div>
答案 3 :(得分:0)
首先,确定您拥有的数据的最小值和最大值。然后,您的问题相当于this one -
我们会将MIN
称为您的最低目标,MAX
是您的最高目标。我们会将val_min
称为您的最低值,val_max
为您的最大价值。
然后您需要找到两个范围 - RANGE = MAX-MIN
,val_range = val_max - val_min
现在,您可以开始转换。
首先,将待转换的value
转换为0到1之间的数字,val_min
映射为0,val_max
映射为1:
normed_value = (value - val_min) / val_range
然后,将0到1的值映射到最终范围:
final_scaled_value = MIN + (normed_value * RANGE)