2013-01-11 107 views
0

我不知道這是否是正確的地方來問這個問題,但在這裏它去 我主要在PHP工作,但任何語言的ans將做。縮小範圍內的一組數字

我正在製作一個網站的標籤雲。像this

東西可以說,我有一個數字

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

這個數字代表了多少次一個字已被搜查在網站的數組。

在標籤雲中,我想顯示流行的關鍵字在一個更大的字體大小。 所以我想用這個數字作爲鏈接的字體大小

所以我的問題是,我怎樣才能減少這些數字相對於對方,使他們都發生在10至20的憤怒。哪裏10和20將是標籤的字體大小

我希望我已經清楚了。

+0

所以,你要的字體大小爲10和20之間(含)? – Boundless

+0

聽起來像簡單的數學。如果54是最小的數字,你希望它是10,那麼執行'10/54'來找出應用的因素。然後將該數組中的每個數字與該因子相乘。 –

+0

你也可以在math.stackexchange.com上試試這個。 – hafichuk

回答

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; 
+0

謝謝!這工作完美無瑕。 +1的詳細答案! :) – Krimson

+0

很高興它適合你。 – hafichuk

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()。

希望這給你一個如何解決問題的好主意。