| 
<?
class Clouds {
 /**
 *    constructor
 */
 function Clouds($filename = 'clouds.dat')
 {
 if(!file_exists($filename))
 {
 $f = fopen($filename,"w");
 fwrite($f,serialize(array()));
 fclose($f);
 }
 }
 
 /**
 * prepare words
 */
 
 function prepareWord($entry)
 {
 $entry = preg_replace("/\d+/","",$entry);
 $entry = preg_replace("/\W+/","-",$entry);
 $entry = preg_replace("/(^\W)|(\W$)/","",$entry);
 $entry = preg_replace("/[\-]+/","-",$entry);
 return ($entry);
 }
 
 /**
 *    write
 */
 function write($clouds,$filename = 'clouds.dat')
 {
 $f = fopen($filename,"w");
 fwrite($f,serialize($clouds));
 fclose($f);
 }
 
 /**
 *    read
 */
 function read($filename = 'clouds.dat')
 {
 if(!file_exists($filename))
 $clouds = new Clouds;
 $file = file($filename);
 $clouds = unserialize($file[0]);
 return $clouds;
 }
 
 /**
 *    update
 */
 function update($word)
 {
 $clouds = Clouds::read();
 $word = Clouds::prepareWord($word);
 if(array_key_exists($word,$clouds))
 $clouds[$word]++;
 else
 $clouds[$word] = 1;
 Clouds::write($clouds);
 }
 
 /**
 *    render clouds
 */
 function render($format,$min = 9,$max = 28)
 {
 $clouds = Clouds::read();
 if(sizeOf($clouds) == 0)
 {
 $result = 'No Data';
 $clouds = new Clouds;
 } else    {
 $minimum_count = min(array_values($clouds));
 $maximum_count = max(array_values($clouds));
 $spread = $maximum_count - $minimum_count;
 $result = '';
 foreach($clouds AS $cloud=>$cnt)
 {
 $size = $min + ($cnt - $minimum_count) * ($max - $min) / $spread;
 $tag = @str_replace('###WORD###', $cloud, $format);
 $tag = @str_replace('###SIZE###', floor($size), $tag);
 $result .= $tag;
 }
 }
 return $result;
 }
 }
 
 // usage of class
 // 1. add words. Clouds::update("php");
 // 2. show tag cloud
 //echo Clouds::render('<a href="?###WORD###" style="font-size:###SIZE###px">###WORD###</a> ');
 ?>
 |