我不知道这是否是提出这个问题的正确位置,但在这里 我主要在php工作,但任何语言的ans都可以。
我正在为网站制作标签云。像this
这样的东西假设我有一组数字
array(54, 67, 68, 72, 98, 103, 112, 136, 169, 200, 201)
这个数字表示在网站上搜索某个单词的次数。
在标签云中,我希望以更大的字体大小显示热门关键字。 所以我想用这个数字作为字体大小的链接
所以我的问题是,如何相对于彼此减少这些数字,以便所有这些数字在10到20之间发生。其中10和20将是标签的字体大小
我希望我很清楚。
答案 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()。
希望这能让您对如何解决问题有所了解。