【问题标题】:Special random algorithm in PHP [closed]PHP中的特殊随机算法[关闭]
【发布时间】:2014-12-01 00:28:21
【问题描述】:

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

  • 有几个 (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')
);

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

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

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

有人有什么建议吗?

【问题讨论】:

  • 您想从每个子数组中随机选择一项吗?
  • 例如需要对我进行更多说明。
  • 我应该这样工作:对于我提供的每个参数,它应该通过 $variations 数组并从每个嵌套数组中选择一项。例如。我提供“537”作为参数,然后它将(作为示例)从第一项中获取“1.2”,然后从第二项中获取 2.3,然后从第三项中获取 3.1,直到最后一项,“M.4”。对于相同的值,它应该保持变化相同,如果参数不相等,则使其不同。
  • 我没有看到这个问题质量低

标签: php arrays algorithm random


【解决方案1】:

您要的是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() 输出,使用它来洗牌该特定数组并选择一个数字。

如何“洗牌”?一个例子可能是将所有数字相加(4+6+9+3+5+3+9+3+2=44)和开始计算第 44 项,(即:44 mod [# of item in array])

【讨论】:

    【解决方案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();
    

    【讨论】:

    • 不完全是,如果我再次提供相同的参数值,结果应该是相同的。我更新了我的问题。
    • 已编辑:使用参数播种随机数生成器。
    【解决方案3】:

    如果您希望从 $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);
    

    【讨论】:

    • 不完全是,如果我再次提供相同的参数值,结果应该是相同的。
    猜你喜欢
    • 1970-01-01
    • 2013-05-14
    • 2013-08-21
    • 2014-09-17
    • 1970-01-01
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多