在边界内缩放一组数字

时间:2013-01-11 20:11:42

标签: php scale

我不知道这是否是提出这个问题的正确位置,但在这里 我主要在php工作,但任何语言的ans都可以。

我正在为网站制作标签云。像this

这样的东西

假设我有一组数字

array(54, 67, 68, 72, 98, 103, 112, 136, 169, 200, 201)

这个数字表示在网站上搜索某个单词的次数。

在标签云中,我希望以更大的字体大小显示热门关键字。 所以我想用这个数字作为字体大小的链接

所以我的问题是,如何相对于彼此减少这些数字,以便所有这些数字在10到20之间发生。其中10和20将是标签的字体大小

我希望我很清楚。

2 个答案:

答案 0 :(得分:3)

这是fiddle

<?php

$values = array(54, 67, 68, 72, 98, 103, 112, 136, 169, 200, 201);

$max = max($values);
$min = min($values);

$fontMin = 10;
$fontMax = 20;

$valueDiff = $max - $min;
$fontDiff = $fontMax - $fontMin;
$incrementEvery = round($valueDiff / $fontDiff);

foreach ($values as $value) {
    $actualFont = round(($value - $min) / $incrementEvery) + $fontMin;
    echo "$value: $actualFont \n";
}

结果:

54: 10 
67: 11 
68: 11 
72: 11 
98: 13 
103: 13 
112: 14 
136: 15 
169: 18 
200: 20 
201: 20

单线是:

round(($value - $min) / round(($max - $min) / ($fontMax - $fontMin))) + $fontMin;

答案 1 :(得分:1)

您可以使用php函数sort()[http://php.net/manual/en/function.sort.php]对数组进行排序,以获得最高和最低数字之间的差异。例如,在你的列表中,201是最高的,54是最低的,给你147的差异。由于你想要10到20之间,你可以使用10种不同的字体大小(如果使用小数则更多),这样你就可以将147除以10,以确定将字体大小增加1点所需的最小项数。

因此,54将是10磅字体,68将是11磅字体(54 + 14.7 = 68.7)。如果你想使用整数,只需使用PHP floor()。

希望这能让您对如何解决问题有所了解。