PHP中的特殊随机算法

时间:2014-10-06 17:22:26

标签: php arrays algorithm random

我正在尝试为以下情况编写算法:

  • 有几个(N)变量,带有数字/字符串(选择任何类型)
  • 有一个M长度的二维数组:

数组的一个例子:

$variations = array(
  array('1.1', '1.2', '1.3'),
  array('2.1', '2.2', '2.3'),
  array('3.1', '3.2', '3.3'),
  array('4.1', '4.2', '4.3', '4.4'),
  array('5.1', '5.2', '5.3'),
  array('6.1', '6.2', '6.3'),
  array('7.1', '7.2', '7.3'),
  ...
  array('M.1', 'M.2', 'M.3', 'M.4', 'M.5')
);

对于每个变量,我需要从每个级别的数组中获取唯一的值组合,例如:

  • param是567,结果是1.2,2.3,3.1,4.1,5.2,6.1,7.3,...... M.4
  • param是1000,结果是1.3,2.1,3.3,4.3,5.1,6.2,7.1,...... M.1
  • ...
  • param是567,结果是1.2,2.3,3.1,4.1,5.2,6.1,7.3,...... M.4

更新:如果我再次提供相同的参数值,结果应该相同。

有人有任何建议吗?

3 个答案:

答案 0 :(得分:2)

听起来你想从每个子阵列中选择一个随机项目:

srand($param);
foreach($variations as $values) {
    $result[] = $values[array_rand($values)];
}
// if you want a string list instead of an array
$result = implode(',', $result);
// reset the random seed
srand();

答案 1 :(得分:0)

如果你想从$variations数组中的一个数组中随机选择,你可以遍历它们并根据值的数量选择一些数据。

<?php

$variations = array(
  array('1.1', '1.2', '1.3'),
  array('2.1', '2.2', '2.3'),
  array('3.1', '3.2', '3.3'),
  array('4.1', '4.2', '4.3', '4.4'),
  array('5.1', '5.2', '5.3'),
  array('6.1', '6.2', '6.3'),
  array('7.1', '7.2', '7.3'),
  array('M.1', 'M.2', 'M.3', 'M.4', 'M.5')
);

$unique = array();
foreach ($variations as $arr) {
    $unique[] = $arr[rand(0, (count($arr) - 1))];
}

print_r($unique);

答案 2 :(得分:0)

您要求的是pseudo random number generator,因为号码取决于初始种子。

srand(1001); // seeding the random number
print_r(rand()); // run it 10x, always the same result.

如果您提供的数字为X,则srand(D+X+1); .... srand(D+X+M);种子D=initial number。并使用每个srand()rand()输出,使用它来对该特定数组进行洗牌并选择一个数字。

如何&#34;进行随机播放&#34;?一个例子可能会将所有数字相加(4 + 6 + 9 + 3 + 5 + 3 + 9 + 3 + 2 = 44)并开始计算第44项,(即:44 mod [数组中项目的数量])