Вычисление веса тега с использованием логарифма

По мотивам http://habrahabr.ru/blogs/webdev/30543/ себе на заметку.

Вычисляем вес тега в облаке с использованием логарифма. Зачем?

Здесь всего лишь кусок кода. Аргументы и рассуждения по ссылке выше.

PHP:
  1. class Tag extends BaseTag
  2. {
  3.   /**
  4.    *
  5.    * @param array $options массив с максимальным (max), минимальным (min) значением
  6.    *                       и колчиеством градаций (levels)
  7.    * @return int [1,levels]
  8.    */
  9.   public function getWeight(array $options)
  10.   {
  11.     if (!isset($this->nb_posts) || !isset($options['max']) || !isset($options['min']) || !isset($options['levels']))
  12.     {
  13.       return 1;
  14.     }
  15.     else {
  16.       $options['min'] = log($options['min'] + 1);
  17.       $options['max'] = log($options['max'] + 1);
  18.       return round(
  19.           1
  20.           + (log($this->nb_posts + 1) - $options['min'])
  21.           * ($options['levels'] - 1)
  22.           / ($options['max'] - $options['min'] )
  23.         );
  24.     }
  25.   }
  26. }

4 Comments

  1. Tark says:

    Спасибо за интересный способ!

    К сожалению, если вес очень сильно разнится, то получается все равно не очень красиво… Если минимальный вес – 1, а максимальный 80000, то облако тегов выглядит немного некрасиво, каким бы не был установлен параметр levels. Решить проблему удалось, но все равно как-то не так)))

    $size = round(1 + (log($tag_amount + 1) – $min) * ($levels – 1) / ($max – $min)) * 38;

    $tag_content .= “$tag “;

    levels установлен в 8. Смотрится неплохо)

    Еще раз спасибо)

  2. Tark says:

    Суман!
    Жестко ступил, можно ведь полученные значения использовать в названии класса. Приношу свои извинения, способ просто чудесный!

  3. Xdezzz says:

    Указывайте ссылки с http а не ttp )))

Leave a Reply

You must be logged in to post a comment.