PHP nasıl bir listeden 10 rastgele şeyler seçerim?

5 Cevap php

Ben bir diziden one rastgele öğeyi seçmek için biliyorum, ama nasıl yirmi öğeleri, diyelim ki, bir diziden ten rastgele öğeleri hakkında? (PHP).

Bir dosya adı ve bir açıklama: Ne biraz daha karmaşık hale getirir, her madde aslında iki bölümden olmasıdır. Temelde, on rastgele görüntüleri Eğer yeniden her zaman gösterecektir bir web sayfası için. Ben düz metin ya da sabit kod bunun yerine bir veritabanı kurmak bunu içermesi tercih ederim o kadar basit olsa da, bu verilerin gerçek biçimi gerçekten önemli değil. (Ayrıca sık sık değiştirmek demek değil.)

Bonus soru değil, ben henüz bu yapacağım emin - ama nasıl girdileri ağırlık olurdu, bazı öğeler always aldı, ya da en azından daha sık diğerlerinden daha olsun böyle?

Teşekkürler.

5 Cevap

http://us3.php.net/manual/en/function.array-rand.php: php bir diziden bir veya daha fazla rasgele öğeleri seçmek için nasıl

How to do random weighted elements:
http://20bits.com/articles/random-weighted-elements-in-php/

Örnek 1 array_rand () örneği

<?php
$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");
$rand_keys = array_rand($input, 2);
echo $input[$rand_keys[0]] . "\n";
echo $input[$rand_keys[1]] . "\n";
?>

PHP bir dizi bir dizi iyi bir strateji olmalıdır. İstediğiniz herhangi bir şekilde bu dizi için verileri tutmak (kodlanmış, XML, vb) ve gibi dizilerde bunu sağlayabilir:

Array {
    Array (item0) { filename,description, weight,...}
    Array (item1) { filename,description, weight,...}
    Array (item2) { filename,description, weight,...} 
}

Daha sonra rastgele diziden öğeleri kaldırmak için array_rand işlevini kullanabilirsiniz. Her giriş için bir ağırlık değeri oluşturma (örn. rastgele diziden 2 ürün almak ağırlığını kontrol, daha büyük bir ağırlığa sahip birini almak ve diğer değiştirin) Eğer öncelik stratejisi çeşit kullanan başka bir yere bir giriş seçmek sağlayacak

Ben tür sormak için ne yapar bazı kodlar var. Ben bir metin dosyasına sponsorluk bağlantıların bir listesini saklamak, ve rastgele onları almak. Ben seti eğmek istiyorsanız Ancak, birden çok bağlantıları kullanabilirsiniz ;-)

Sponsorlar dosyası:

<a href="http://www.example.com">Example</a>
<a href="http://www.example.com">Example</a>
<a href="http://www.bbc.co.uk">BBC</a>
<a href="http://www.google.com">Google</a>

PHP:

$sponsor_config = 'sponsors.txt';
$trimmed = file($sponsor_config, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$op = array();

$limit = 20; // insurance
$loops = 0;
$needed =  4;
$op[] = '<div id="sponsorship"><!-- start sponsorship -->';
$selected = array();
while ( (count($selected) < $needed) AND ($loops <= $limit)) {
  $choice = rand(0, count($sponsors)-1);
  if(!in_array($sponsors[$choice], $selected)) $selected[] = $sponsors[$choice];
  $loops++;
}

foreach($selected as $k => $selection) {
  $op[] = '<p class="sponsorship bg_'.($k%3+1).'">Click the link below to<br />visit our Site Sponsor:<br />'.$selection.'</p>';
}

$op[] = '</div><!-- end sponsorship -->';
return join("\n",$op)."\n";

V. hızlı ve v.v. kirli ... ama çalışıyor