Versio

Actiecode volgens percentage selecteren

Overzicht Reageren

Rolf -

Rolf -

25/08/2010 11:32:40
Quote Anchor link
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
 
PHP hulp

PHP hulp

23/05/2012 20:15:19
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Maestro Roboroads

Maestro Roboroads

25/08/2010 11:44:50
Quote Anchor link
je kan met rand(1,100) een getal tussen 1 en 100 opvragen. geheel random =D
Gewijzigd op 25/08/2010 11:45:14 door Maestro Roboroads
 
Rolf -

Rolf -

25/08/2010 11:46:45
Quote Anchor link
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-)
 
Jens V

Jens V

25/08/2010 11:55:38
Quote Anchor link
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. :)
 
Rolf -

Rolf -

25/08/2010 12:08:22
Quote Anchor link
Ja zoiets. Ik zal eens zoeken en hopen dat ik het vind.
Nog tips voor de zoekwoorden ;)?
 
Jens V

Jens V

25/08/2010 12:20:32
Quote Anchor link
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
 
Rolf -

Rolf -

25/08/2010 12:22:08
Quote Anchor link
Ok, bedankt voor tips!
Mocht iemand nog een script weten, laat het maar weten!
 
Joren de Wit
Beheerder

Joren de Wit

25/08/2010 12:31:50
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?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...
 
Mark PHP

Mark PHP

25/08/2010 13:08:47
Quote Anchor link
Je kan toch gewoon rand() gebruiken?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
$random
= rand(1, 100);
if($random < 20) {
  // 20%
}
elseif($random > 90) {
  // 10%
}
?>

EDIT: @Erwin Geen: stom, niet nagedacht.
Gewijzigd op 25/08/2010 13:16:34 door Mark PHP
 
Erwin Geen

Erwin Geen

25/08/2010 13:14:09
Quote Anchor link
Mark van Seventer op 25/08/2010 13:08:47:
Je kan toch gewoon rand() gebruiken?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?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.
 
Rolf -

Rolf -

25/08/2010 14:18:22
Quote Anchor link
Super bedankt Mark en Erwin.
Dit is precies wat ik nodig heb ;)!

Toevoeging op 25/08/2010 14:45:35:

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?
 
Joren de Wit
Beheerder

Joren de Wit

25/08/2010 16:52:40
Quote Anchor link
Ja, maar je moet in je if-else statement wel consequent hetzelfde nummer gebruiken. Nu wordt er twee keer een nieuw nummer gegenereerd en klopt de constructie dus niet.
 



Overzicht Reageren