Что лучший способ состоит в том, чтобы генерировать облако тегов от массива с помощью h1 через h6 для калибровки?

У меня есть следующие массивы:

$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 теги.

73
задан Jonas 23 November 2019 в 20:43
поделиться

5 ответов

Первое, что пришло на ум...

$artist = array("the roots","michael jackson","billy idol","more","and more","and_YET_MORE");
$count = array(5,3,9,1,1,3);
$highest = max($count);
for (int $x = 0; $x < count($artist); $x++)
{
    $normalized = $count[$x] / $highest;
    $heading = ceil($normalized * 6); // 6 heading types
    echo "<h".$heading.">".$artist[$x]."</h".$heading.">";
}
30
ответ дан skyboyer 24 November 2019 в 12:22
поделиться

Возможно, это - маленький академик и вне темы но hX теги являются, вероятно, не лучшим выбором для облака тегов по причинам структуры документа и всей такой вещи.

, Возможно span с или ol с соответствующими атрибутами класса (плюс некоторый CSS)?

24
ответ дан Aminah Nuraini 24 November 2019 в 12:22
поделиться

Использовали этот отрывок некоторое время, кредитом является prism-perfect.net. Не использует теги H хотя

<div id="tags">
    <div class="title">Popular Searches</div>
    <?php
        // Snippet taken from [prism-perfect.net]

        include "/path/to/public_html/search/settings/database.php";
        include "/path/to/public_html/search/settings/conf.php";

        $query = "SELECT query AS tag, COUNT(*) AS quantity
        FROM sphider_query_log
        WHERE results > 0
        GROUP BY query
        ORDER BY query ASC
        LIMIT 10";

        $result = mysql_query($query) or die(mysql_error());

        while ($row = mysql_fetch_array($result)) {

            $tags[$row['tag']] = $row['quantity'];
        }

        // change these font sizes if you will
        $max_size = 30; // max font size in %
        $min_size = 11; // min font size in %

        // get the largest and smallest array values
        $max_qty = max(array_values($tags));
        $min_qty = min(array_values($tags));

        // find the range of values
        $spread = $max_qty - $min_qty;
        if (0 == $spread) { // we don't want to divide by zero
            $spread = 1;
        }

        // determine the font-size increment
        // this is the increase per tag quantity (times used)
        $step = ($max_size - $min_size)/($spread);

        // loop through our tag array
        foreach ($tags as $key => $value) {

            // calculate CSS font-size
            // find the $value in excess of $min_qty
            // multiply by the font-size increment ($size)
            // and add the $min_size set above
            $size = $min_size + (($value - $min_qty) * $step);
            // uncomment if you want sizes in whole %:
            // $size = ceil($size);

            // you'll need to put the link destination in place of the /search/search.php...
            // (assuming your tag links to some sort of details page)
            echo '<a href="/search/search.php?query='.$key.'&search=1" style="font-size: '.$size.'px"';
            // perhaps adjust this title attribute for the things that are tagged
            echo ' title="'.$value.' things tagged with '.$key.'"';
            echo '>'.$key.'</a> ';
            // notice the space at the end of the link
        }
    ?>
</div>
8
ответ дан Konrad Krakowiak 24 November 2019 в 12:22
поделиться

@Ryan

Это корректно, но он на самом деле делает теги с наименьшим количеством числа, больше. Этот код был протестирован:

$artist = array("the roots","michael jackson","billy idol","more","and more","and_YET_MORE");
$count = array(5,3,9,1,1,3);
$highest = max($count);
for ($x = 0; $x < count($artist); $x++) {
    $normalized =  ($highest - $count[$x]+1) / $highest;
    $heading = ceil($normalized * 6); // 6 heading types
    echo "<h$heading>{$artist[$x]}</h$heading>";
}
6
ответ дан Kevin 24 November 2019 в 12:22
поделиться

Как помощник в направляющих:

def tag_cloud (strings, counts)
    max = counts.max
    strings.map { |a| "<span style='font-size:#{((counts[strings.index(a)] * 4.0)/max).ceil}em'>#{a}</span> "  }
end

Вызов это от представления:

<%= tag_cloud($artists, $counts) %>

Это производит <span style='font-size:_em'> элементы в массиве, который будет преобразован в строку в представлении для окончательного рендеринга как так:

<span style='font-size:3em'>the roots</span>
<span style='font-size:2em'>michael jackson</span> 
<span style='font-size:4em'>billy idol</span> 
<span style='font-size:1em'>more</span> 
<span style='font-size:1em'>and more</span> 
<span style='font-size:2em'>and_YET_MORE</span> 

было бы лучше иметь class атрибут и сослаться на классы в таблице стилей, как упомянуто Brendan выше. Намного лучше, чем использование h1-h6 семантически и существует меньше багажа стиля с <span>.

1
ответ дан Aminah Nuraini 24 November 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: