Autor Zpráva
mzk
Profil *
Potřeboval bych udělat něco jako exponenciální funkci.
Mám tabulku, kde je:

nazev | pocet
aaa | 1
ccc | 22
ddd | 111
aa | 444
asdf | 2

A tvořím něco jako tagy, kde slovo $nazev bude tak velký, jak bude velký $pocet. Jenom že je blbost udělat <span size=$pocet>$nazev</span> protože to by byl moc velký nepoměr mězi 1 a 444.

Takže by to chtělo malé hodnoty zvěšovat a velkmé zmenšovat, aby se usekali výchylky.

Napadá mě toto

$tag = $db['tag'];
$size = $db['pocet'];
if ($size < 9)
{
if ($size < 5)
{
$size = $size *6;
}
else
{
$size = $size * 4;
}
}
if ($size > 30)
{
$size = $size / 2;
}
if ($size > 30)
{
$size = 30;
}

Ale určitě by to šlo i nějak lépe ne? Násobit to nějakým keefiientem aby se hodnoty držely mezi 8 až 30..
nightfish
Profil
já bych na to použil nějakou funkci založenou na logaritmu...
YoSarin
Profil
nightfish
Buď takhle, anebo si hlídat aby největší tag měl velikost 30 a nejmenší třeba 9:
$size = 9 + ($pocet/$maxPocet)*21;
Kde $pocet je počet aktuálního tagu a $maxPocet je počet nejčastějšího tagu.
czechport
Profil
já bych na to šel přes procenta
našel bych si největší číslo v tabulce a uložil jako $max_pocet

No a pak $cislo = $cislo*100/$max_pocet

výsledek zaokrouhli a máš číslo od 1 do 100. Pokud chceš ještě menší vyděl např. čtyřmi a máš číslo od 1 do 25ti atd.
mzk
Profil *
Díky všem. Zkusil jsem všechny 3 způsoby, nejlepší se mi zdál asi ten logaritmus + zaokrouhlování směrem nahoru.
Toto téma je uzamčeno. Odpověď nelze zaslat.