Beste PHP'ers,

Voor een website moet ik een script maken waarin 10 verschillende soorten actiecodes staan.

Deze actiecodes moeten volgens een bepaald percentage geselecteerd worden, het liefste random.

Code 1 moet bijvoorbeeld 20 op de 100 keer geselecteerd worden.
Code 2 10 op de 100 keer.
Enz. enz.

Hoe kan ik dit het makkelijkste doen?

Ik zat zelf te denken door het laatst ingevoegde record in de database op te halen en als dit bijvoorbeeld 19 is, code 1 te geven. Maar dit is niet echt random en dus niet zo eerlijk verdeeld.

Heeft iemand hier een goede oplossing voor?

Groetjes,

Rolf van der Horst
je kan met [php]rand[/php](1,100) een getal tussen 1 en 100 opvragen. geheel random =D
Dat snap ik, maar dan kiest hij net zo vaak 1 als 20 en het nou juist net de bedoeling dat hij 1, 20 keer selecteerd en 2, 10 keer. Snappie ;)?

Met alleen rand() is het wel heel makkelijk 8-)
Je zoekt dus eigenlijk een rand-functie die niet zo random is... Een beetje met de natte vinger naampjes trekken? Daarvan is hier vroeger al eens een topic geweest. Zoek eens op het forum. :)
Ja zoiets. Ik zal eens zoeken en hopen dat ik het vind.
Nog tips voor de zoekwoorden ;)?
Je kan altijd eens kijken op php.net Daar bij de commentaar kan het goed zijn dat mensen zoiets al hebben gemaakt. Kijk dan ook eens bij de Engelse versie van de site.

Als je daar niets vindt kan je misschien ook eens zoeken voor in de engines van allerlei web-based php-games. Daar zal zoiets ook wel inzitten, omdat resultaten daar van een bepaalde score afhangen.

Jens
Ok, bedankt voor tips!
Mocht iemand nog een script weten, laat het maar weten!

De meest eenvoudige manier die in een kleinschalig systeem wel voldoet is simpelweg het vullen van een array met de code en elke code net zo vaak voor laten komen als dat je hem wilt laten weergeven.

<?php
$code1 = 'code1';
$code2 = 'code2';

$array = array($code1, $code2, $code2);
shuffle($array);

echo $array[0];
?>
In dit voorbeeld zal code 2 twee keer zo vaak weergegeven worden als code 1. Uiteraard kun je de array ook automatisch laten vullen met behulp van verschillende loopjes...
Je kan toch gewoon rand() gebruiken?
<?php
$random = rand(1, 100);
if($random < 20) {
// 20%
}
elseif($random > 90) {
// 10%
}
?>
EDIT: @Erwin Geen: stom, niet nagedacht.
Mark van Seventer op 25/08/2010 13:08:47

Je kan toch gewoon rand() gebruiken?
<?php
if(rand(1, 100) < 20) {
// 20%
}
elseif(rand(1, 100) > 90) {
// 10%
}
?>

Dan moet je wel die rand opslaan in een variabele. Anders maakt het steeds een nieuwe rand aan.

Super bedankt Mark en Erwin.
Dit is precies wat ik nodig heb ;)!

[size=xsmall]Toevoeging op 25/08/2010 14:45:35:[/size]

Nog even snel een vraagje:

Moet ik het random nummer perse opslaan in een variabele? Want als ik toch 100 keer een random nummer aan laat maken, moeten de verhoudingen wel kloppen toch, wat percentages betreft?

Reageren