基于PHP rand()的简单链接选择器不太有效

时间:2015-08-25 14:40:11

标签: php random

所以我想将前5个链接中的5%流量发送到第4个链接中的每个链接,剩余的85%发送到第4个和最后一个(用“else”抓住)。我对兰特的射程是1,20。

从下面的代码中,为什么我只会看到当我回显clickref_url时返回的第3个(约15%的时间)或第4个(约85%的时间)链接,从不会看到每个应该获得的第1个或第2个链接5流量的百分比?

谢谢!谢谢!谢谢!

<?php
$rand = rand(1,20);
if ($rand == 1) {
  /* Link1 */
  $clickref_url = 'http://www.link1domain.com?var1='.$email.'&var2=mydomain';
  $clickref_url.= '&firstname='.$firstname;
  $clickref_url.= '&lastname='.$lastname;
  $clickref_url.= '&email='.$email;
  $clickref_url.= '&zipcode='.$zip;
}
if ($rand == 2) {
  /* Link2 */
  $clickref_url = 'http://www.link2domain.com?var1='.$email.'&var2=mydomain';
  $clickref_url.= '&firstname='.$firstname;
  $clickref_url.= '&lastname='.$lastname;
  $clickref_url.= '&email='.$email;
  $clickref_url.= '&zipcode='.$zip;
}
if ($rand == 3) {
  /* Link3 */
  $clickref_url = 'http://www.link3domain.com?var1='.$email.'&var2=mydomain';
  $clickref_url.= '&firstname='.$firstname;
  $clickref_url.= '&lastname='.$lastname;
  $clickref_url.= '&email='.$email;
  $clickref_url.= '&zipcode='.$zip;
} else {
  /* Link4 */
  $clickref_url = 'http://www.link4domain.com?var1='.$email.'&var2=mydomain';
  $clickref_url.= '&firstname='.$firstname;
  $clickref_url.= '&lastname='.$lastname;
  $clickref_url.= '&email='.$email;
  $clickref_url.= '&zipcode='.$zip;
}
?> 

2 个答案:

答案 0 :(得分:2)

因为你正在使用if测试,其他3个/其他选项覆盖了前两个选项已经完成的任何测试

如果您的初始兰特为1,则会执行if (rand == 1)的代码,也会执行else的{​​{1}}部分代码

使用if (rand == 3) {...} else {...}

elseif

由于大多数代码行都会重复,因此将其简化为

$rand = rand(1,20);
if ($rand == 1) {
    /* Link1 */
    $clickref_url = 'http://www.link1domain.com?var1='.$email.'&var2=mydomain';
    $clickref_url.= '&firstname='.$firstname;
    $clickref_url.= '&lastname='.$lastname;
    $clickref_url.= '&email='.$email;
    $clickref_url.= '&zipcode='.$zip;
} elseif ($rand == 2) {
    /* Link2 */
    $clickref_url = 'http://www.link2domain.com?var1='.$email.'&var2=mydomain';
    $clickref_url.= '&firstname='.$firstname;
    $clickref_url.= '&lastname='.$lastname;
    $clickref_url.= '&email='.$email;
    $clickref_url.= '&zipcode='.$zip;
}elseif ($rand == 3) {
    /* Link3 */
    $clickref_url = 'http://www.link3domain.com?var1='.$email.'&var2=mydomain';
    $clickref_url.= '&firstname='.$firstname;
    $clickref_url.= '&lastname='.$lastname;
    $clickref_url.= '&email='.$email;
    $clickref_url.= '&zipcode='.$zip;
} else {
    /* Link4 */
    $clickref_url = 'http://www.link4domain.com?var1='.$email.'&var2=mydomain';
    $clickref_url.= '&firstname='.$firstname;
    $clickref_url.= '&lastname='.$lastname;
    $clickref_url.= '&email='.$email;
    $clickref_url.= '&zipcode='.$zip;
}

答案 1 :(得分:0)

为什么不把它们放在一个数组中: -

$urls[1] = "http://www.link1domain.com?var1=$email&var2=mydomain&firstname=$firstname&lastname=$lastname&email=$email&zipcode=$zip";

$urls[2] = "http://www.link2domain.com?var2=$email&var2=mydomain&firstname=$firstname&lastname=$lastname&email=$email&zipcode=$zip";

$count = count($urls);
$index = rand(1,100);
if ($index > $count) { $index = $count; }
$clickref_url = $urls[$index];

我只展示了两个,但很容易添加更多。

还有一种更简单的方法来连接字符串!