2

所以我希望在 5 个不同的变量之间交替,但希望每个变量的“负载”相等。我已经看到它只用两个变量完成,并根据设置的限制生成的随机数交替。但试图将这个想法扩展到五个变量。提前致谢。

仅出于举例目的,假设我有 5 张图像,并希望在 100 次测试后平均显示每张图像。这是我能想到的最简单的解释方式。

这就是我只使用 2 个变量的方式,但我试图考虑如何使用更多变量来完成它。

$ad1 = '<img src... >';
$ad2 = '<img src...2 >';

echo mt_rand(0, 1) ? $ad1 : $ad2;

来源:PHP 在不使用数据库的情况下平等地在两个变量之间切换

所以这就是我想要知道的关于在不同变量之间平等存在的想法。

$input = array("a", "b", "c", "d");
$rand_keys = array_rand($input);
echo 'var key ="'.$input[$rand_keys].'"';
4

3 回答 3

3

下面有两个选项,因为您的问题的标题是“在 5 个变量之间平均切换” - 有一个相等的分布解决方案和一个随机解决方案。

请注意,您需要安装 apc 才能使等旋转解决方案正常工作。这是一个相当常见的 php 模块,如果您有权限,可以很容易地安装:

Redhat/centos : yum install php-apc

Ubuntu:sudo apt-get php-apc

如果您使用的是共享主机并且他们没有安装 apc,那么这对您不起作用:(

<?php

//If you want perfectly equal distribution.
$variables = array('a', 'b', 'c', 'd', 'e');
if (!($this_var = apc_fetch('last'))) $this_var = 0;
echo $variables[$this_var];
$this_var++;
$this_var = $this_var % 5;
apc_store('last', $this_var);


//If you want random distribution
$variables = array('a', 'b', 'c', 'd', 'e');
$index = mt_rand(0, 4);
echo $variables[$index];
于 2013-10-07T21:47:44.543 回答
2

如果您想从一组中随机挑选,您可以使用array_rand().

$images = array( '<img src="img1.png">', '<img src="img2.png">', '<img src="img3.png">', '<img src="img4.png">', '<img src="img5.png">' );

$pick = array_rand( $images );

$pick将是$images数组中的随机键。

这很容易扩展,因为您可以继续向数组添加元素。在这里,我当然遵循您将<img>标签添加到数组的示例,但您也可以轻松地仅向数组添加一些标识符。

于 2013-10-07T21:49:28.587 回答
0

我建议使用一个类来处理每个“对象”:

<?php
  ...
  ...
  class RandObjClass
  {
     var $myCounter = 1;
     var $mySeed = time();
     var $myReference = "...path-to-image-file..."; # Image for example
     function getWeight() {
        srand($mySeed);
        $myWeight = $this->myCounter * rand();
        return($myWeight);
     }
     setSeed($xSeed) {
        $this->mySeed = $xSeed;
     }
  }
...
...

填充 x“RandObjClass”对象的数组并使用“getWeight”选择下一个“最高”权重。

您可以通过各种方法(例如计数)来影响体重。这会影响接下来选择哪个。

于 2013-10-07T21:47:12.897 回答