Welcome to WebmasterWorld Guest from 54.221.28.179

Forum Moderators: coopster & jatar k

Message Too Old, No Replies

PHP fork

     

rhodopsin

8:04 pm on Nov 12, 2005 (gmt 0)

10+ Year Member



I would like to have a fork in my PHP code - the coding will branch with 2 possible options to execute (2 possible web contents to show). Which one is executed will depend on a certain changeble ratio factor. So, for instance, if the ratio is 3:7:

if the PHP code is called 10 times - 3 times option 1 will be run. 7 times option 2 will be run.

My Q is - how can I go about coding this. I really haven't got a clue how to implement this ratio (probability) control.

eelixduppy

8:29 pm on Nov 12, 2005 (gmt 0)

WebmasterWorld Senior Member eelixduppy is a WebmasterWorld Top Contributor of All Time 5+ Year Member



Just thinking about it quickly i think i found a solution to your problem....

now i haven't tried anything out but im sure it will work.

When the page loads it should retrieve the number of previous visitors to your site from a text file or database. Now depending on what ratio you are using, in your example 3:7, you add the two numbers (i.e. 3+7=10). Now you take the amount of visitors to your site and do something like:
$modulus = $visitors % 10;
if($modulus < 4)
{ do something }
else if($modulus > 3)
{ do something else }

As i said i haven't tried it to see if its flawless but it should work! Good luck...

charlier

8:36 pm on Nov 12, 2005 (gmt 0)

10+ Year Member



You could also generate a random number between 1 and 10, if the number is less the 4 you do the 3x case otherwise the 7x case. You can input your limit from a config file to set it to 1:9 2:8 etc.

dmorison

8:42 pm on Nov 12, 2005 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



If you're happy for the distribution to average out to the required ratio over time then you can do it mathematically...


$ratio = intval((3/7) * 100);

if (rand(1,100) < $ratio)
{
// 3's content
}
else
{
// 7's content
}


ergophobe

6:09 pm on Nov 13, 2005 (gmt 0)

WebmasterWorld Administrator ergophobe is a WebmasterWorld Top Contributor of All Time 10+ Year Member Top Contributors Of The Month



Actually, as I read it, the OP wants 3/10 and 7/10 (the ratio is "3 to 7" not "3 out of 7"), so you use charlier's logic and dmorison's code and you have:

if (rand(1,10) < 4)
{
//30%
}
else
{
// 70%
}

panos

11:02 pm on Nov 13, 2005 (gmt 0)

10+ Year Member



It's not that simple guys, what you are suggesting can be true only for large number [en.wikipedia.org] of trials (code executions) and even in that case we will never have exactly 3/10 and 7/10.

If a coin is flipped once the probability that it lands heads up is 0.5 or 50%.

But if it is flipped 10 times the probability that it lands heads up exactly 5 times is not 0.5 but
using the Binomial Probability Formula [google.com]:

(10!/5!(10-5)!) (1/2)^5) (1/2)^5 = 0.246

As we increase the number of tosses the relative frequency (heads up/number of tosses) tends to vary less and stay near 0.5, or 50%.

So we need a large number of trials to obtain our theoretical probability (0.5).

If your code can not be executed thousands of times a day you can use the binomial probability formula.

Use as number of trials the times your code will be executed from statistical analysis of the last days or months

ergophobe

6:56 pm on Nov 14, 2005 (gmt 0)

WebmasterWorld Administrator ergophobe is a WebmasterWorld Top Contributor of All Time 10+ Year Member Top Contributors Of The Month



As dmorison said

If you're happy for the distribution to average

If it has to be exactly three out of every ten, then he will need some sort of counter system. If he wants a 3 in 10 chance of the page coming up, the pseudo-random number generator should get pretty close to that.

 

Featured Threads

Hot Threads This Week

Hot Threads This Month