1. ホーム
  2. php

h1〜h6をサイジングに使用した配列からタグクラウドを生成する最良の方法は何ですか?

2023-08-27 23:49:07

質問

以下のような配列があります。

$artist = array("the roots", "michael jackson", "billy idol", "more", "and more", "and_YET_MORE");
$count = array(5, 3, 9, 1, 1, 3);

で数値の大きいアーティストが表示されるようなタグクラウドを生成したい。 $count で囲まれた h6 タグで囲まれ、最下段の h1 タグで囲まれています。

どのように解決するのですか?

対数関数も追加したくなりますね。(タグクラウドを作成するDrupalモジュール、tagadelicから引用 http://drupal.org/project/tagadelic ):

db_query('SELECT COUNT(*) AS count, id, name FROM ... ORDER BY count DESC');

$steps = 6;
$tags = array();
$min = 1e9;
$max = -1e9;

while ($tag = db_fetch_object($result)) {
    $tag->number_of_posts = $tag->count; #sets the amount of items a certain tag has attached to it
    $tag->count = log($tag->count);
    $min = min($min, $tag->count);
    $max = max($max, $tag->count);
    $tags[$tag->tid] = $tag;
}
// Note: we need to ensure the range is slightly too large to make sure even
// the largest element is rounded down.
$range = max(.01, $max - $min) * 1.0001;

foreach ($tags as $key => $value) {
    $tags[$key]->weight = 1 + floor($steps * ($value->count - $min) / $range);
}

そして、ビューやテンプレートで

foreach ($tags as $tag) {
    $output .= "<h$tag->weight>$tag->name</h$tag->weight>"
}