ما هي أفضل طريقة لتوليد الوسم سحابة من صفيف باستخدام h1 خلال h6 للتحجيم?

StackOverflow https://stackoverflow.com/questions/227

  •  08-06-2019
  •  | 
  •  

سؤال

لدي المصفوفات التالية:

$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 العلامات.

هل كانت مفيدة؟

المحلول

سوف تحتاج إلى إضافة لوغاريتمي الدالة على ذلك أيضا.(مأخوذة من 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>"
}

نصائح أخرى

قبالة الجزء العلوي من رأسي...

$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.">";
}

ولعل هذا هو قليلا الأكاديمية خارج الموضوع ولكن hX العلامات ربما لا يكون أفضل خيار الوسم سحابة لأسباب هيكل الوثيقة وجميع هذا النوع من الشيء.

ربما spans أو ol المناسبة سمات الطبقة (بالإضافة إلى بعض CSS)?

استخدمت هذا مقتطف لفترة الائتمان prism-perfect.net.لا تستخدم ساعة العلامات على الرغم من

<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>

@ريان

هذا صحيح ولكن في الواقع يجعل الكلمات الدليلية مع أقل عدد أكبر.هذا الرمز قد تم اختبارها:

$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>";
}

هذا الأسلوب هو SQL/PostgreSQL المتعصبين.فإنه المهمة بأكملها في قاعدة البيانات ، فإنه يطبع النص مع "slugified" وصلة.ويستخدم عقيدة ORM فقط sql الدعوة ، أنا لا تستخدم الكائنات.لنفترض أن لدينا أحجام 10:

public function getAllForTagCloud($fontSizes = 10)
{
    $sql = sprintf("SELECT count(tag) as tagcount,tag,slug, 
    floor((count(*) * %d )/(select max(t) from 
        (select count(tag) as t from magazine_tag group by tag) t)::numeric(6,2)) 
         as ranking 
         from magazine_tag mt group by tag,slug", $fontSizes);

    $q = Doctrine_Manager::getInstance()->getCurrentConnection();
    return $q->execute($sql);
}

ثم يمكنك طباعتها مع بعض CSS الدرجة من .tagranking10 (أفضل) إلى .tagranking1 (أسوأ):

<?php foreach ($allTags as $tag): ?>
    <span class="<?php echo 'tagrank'.$tag['ranking'] ?>">
        <?php echo sprintf('<a rel="tag" href="/search/by/tag/%s">%s</a>', 
            $tag['slug'], $tag['tag']
        ); ?>
    </span>
<?php endforeach; ?>

و هذا هو CSS:

/* put your size of choice */
.tagrank1{font-size: 0.3em;}
.tagrank2{font-size: 0.4em;}
.tagrank3{font-size: 0.5em;} 
/* go on till tagrank10 */

هذا الأسلوب يعرض كل فئة.إذا كان لديك الكثير منهم, وربما كنت لا تريد الخاص بك الوسم سحابة لتصبح الوسم العاصفة.في هذه الحالة يمكنك أن إلحاق غير HAVING TO جملة استعلام SQL:

-- minimum tag count is 8 --

HAVING count(tag) > 7

هذا كل شيء

كما مساعد في القضبان:

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 السمة المرجعية الصفوف في ورقة نمط كما ذكر من قبل بريندان أعلاه.أفضل بكثير من استخدام h1-h6 لغويا و هناك نمط أقل الأمتعة مع <span>.

أعرف جدا آخر العمر.نشر رأيي كما أنها قد تساعد شخص ما في المستقبل.

هنا هو تعريب في موقع http://www.vbausefulcodes.in/

<?php
$input= array("vba","macros","excel","outlook","powerpoint","access","database","interview questions","sendkeys","word","excel projects","visual basic projects","excel vba","macro","excel visual basic","tutorial","programming","learn macros","vba examples");

$rand_tags = array_rand($input, 5);
for ($x = 0; $x <= 4; $x++) {
    $size = rand ( 1 , 4 );
    echo "<font size='$size'>" . $input[$rand_tags[$x]] . " " . "</font>";
}

echo "<br>";
$rand_tags = array_rand($input, 7);
for ($x = 0; $x <= 6; $x++) {
    $size = rand ( 1 , 4 );
    echo "<font size='$size'>" . $input[$rand_tags[$x]] . " " . "</font>";
}

echo "<br>";
$rand_tags = array_rand($input, 5);
for ($x = 0; $x <= 4; $x++) {
    $size = rand ( 1 , 4 );
    echo "<font size='$size'>" . $input[$rand_tags[$x]] . " " . "</font>";
}
?>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top