http://phpfi.com/247653http://athlan.pl/jak-zrobic-tagi/<?php
$range = ceil((($iTagCount * 100
) / $iMaxTag) / ceil(100
/ $this->_iLevels
)); ?>
Athlan troche przekombinował z tym wzorem
Ten sam efekt daje mój wzór:
<?php
$range = round(($iTagCount/$iMaxTag)*$this->_iLevels
); ?>
Wzorowi natomiast brakuje jednej wiadomej:
$iMinTag tylko nie wiem jak ją podstawić, w moim wzorze oraz wzorze Athlana przyjmuje się że najmniejsze wystąpienie = 1, co nie jest prawdą bo najmniej popularny tag może mieć 3 wystąpienia.
$this->_iLevels = 9 (rangi od 1 do 9)
$iMaxTag = 9 (najbardziej popularny tag = 9)
$iTagCount = 3 (najmniej popularny tag = 3)
$range = 3;
a ze wzoru powinniśmy dostać 1 ponieważ ten tag jest najmniej popularny.
Znalazłem rozwiązanie:<?php
/**
* Zwraca popularność tagu według skali
*
* @param integer $frequency częstotliwość przetwarzanego tagu
* @param integer $frequency_min najmniejsza częstotliwość
* @param integer $frequency_max największa częstotliwość
* @param integer $range_min minimalna ranga
* @param integer $range_max maksymalna ranga
* @param integer $step skok rangi
* @return integer
*/
function calculate ($frequency = 1, $frequency_min = 1, $frequency_max = 1, $range_min = 1, $range_max = 9, $step = 1)
{
$scaleFactor = ($frequency-$frequency_min)/($frequency_max-$frequency_min);
$range = $range_max - $range_min;
return $range_min + ($step * floor($scaleFactor*($range/$step))); }
/** ---TESTY---- **/
$frequency_min = 6;
$frequency_max = 87;
$range_min = 1;
$range_max = 9;
$step = 1;
# Przykład 1 (najmniej popularny tag)
$frequency = 6;
echo calculate
($frequency, $frequency_min, $frequency_max, $range_min, $range_max, $step); // 1
# Przykład 2
$frequency = 18;
echo calculate
($frequency, $frequency_min, $frequency_max, $range_min, $range_max, $step); // 2
# Przykład 3
$frequency = 28;
echo calculate
($frequency, $frequency_min, $frequency_max, $range_min, $range_max, $step); // 3
# Przykład 4
$frequency = 56;
echo calculate
($frequency, $frequency_min, $frequency_max, $range_min, $range_max, $step); // 5
# Przykład 5 (najbardziej popularny tag)
$frequency = 87;
echo calculate
($frequency, $frequency_min, $frequency_max, $range_min, $range_max, $step); // 9
?>
Teraz tylko zlepić klasę i dać do oceny