0

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

我正在为网站制作标签云。像这样的东西

假设我有一个数字数组

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

这个数字代表一个词在网站上被搜索了多少次。

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

所以我的问题是,我怎样才能相对减少这些数字,以便所有这些数字都在 10 到 20 时出现。其中 10 和 20 将是​​标签的字体大小

我希望我足够清楚。

4

2 回答 2

3

这是小提琴

<?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;
于 2013-01-11T20:50:00.640 回答
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()。

希望这能让您对如何解决问题有一个很好的了解。

于 2013-01-11T20:19:46.723 回答