Rastgele olası Y üzerinden ekran X divs

3 Cevap php

Nasıl rastgele toplam olası 10 üzerinden 3 divs görüntülerim?

Bu şimdiye kadar denedim budur:

HTML:

<div id="1">Content 1</div>
<div id="2">Content 2</div>
<div id="3">Content 3</div>
<div id="4">Content 4</div>
<div id="5">Content 5</div>
<div id="6">Content 6</div>

Javascript:

function randomiseDiv()
{
      // Define how many divs we have
      var divCount = 6;

      // Get our random ID (based on the total above)
      var randomId = Math.floor(Math.random()*divCount+1);

      // Get the div that's been randomly selectted
      var chosenDiv= document.getElementById(randomId);

      // If the content is available on the page
      if (chosenDiv)
      {
            // Update the display
            chosenDiv.style.display = 'block';
      }
}
window.onload = randomiseDiv;

Bu aşamada herhangi bir şey yararlı olacaktır ancak ben, bir PHP çözümü tercih ederim.

3 Cevap

Bu soruya anwser dayanarak: http://stackoverflow.com/questions/2380019/generate-8-unique-random-numbers-between-1-and-100/2380349#2380349, burada bir dizi n benzersiz üyelerini seçmek nasıl olduğunu:

// removes n random elements from array this
// and returns them
Array.prototype.pick = function(n) {
    if(!n || !this.length) return [];
    var i = Math.floor(this.length*Math.random());
    return this.splice(i,1).concat(this.pick(n-1));
}

Yani sizin toplama dışında 3 divs almak ve bunları görüntülemek için uygulayabilirsiniz:

 // build the collection of divs with your framework of choice
 // jQuery would be $('div'), Mootools/Prototype $$('div')
var divs = document.getElementsByTagName('div');
// then pick 3 unique random divs and display them
// each is part of ECMAscript5 and a number of current js frameworks
divs.pick(3).each(function (div) {
  div.style.display = "block";
});
// Prototype shortcut is divs.pick(3).invoke('show'); 

Sen, diyelim ki, bir dizi olası div içeriği var $divs, ve bunun gibi üç seçim olabilir:

$divs = array("Content 1", "Content 2", "Content 3");

for($i = 1; $i <= 3; $i++) {
    shuffle($divs);
    $pick = array_pop($divs);
    echo "<div>$pick</div>";
}

Ayrıca dizideki en az 3 değer olup olmadığını görmek için hata kontrol çeşit eklemek gerekir.

Bir diğer olası çözüm array_rand kullanmaktır.

Eğer bir PHP yol arıyorsanız, bu varsayarak $ div 6 öğeleri içeren bir dizidir deneyebilirsiniz.

for($i = 1; $i <= 3; $i++) {
    $div_num = mt_rand(1,6);
    echo $div[$div_num];
}