【问题标题】:Generating events in a random order PHP [closed]以随机顺序生成事件 PHP [关闭]
【发布时间】:2014-08-21 03:22:20
【问题描述】:

基本上我想做的是这样的:

我有一个数字(即 9),最大范围为 36。 我想在 36 种可能性中的 9 种上生成事件(正好是 9/36,不多也不少) 数字 9 来自一个变量,36 一直是 36。 我不希望我的 9 次机会发生在开始或结束时。我希望它是随机的。

示例。 我有 36 次“开枪”的机会中的 9 次。

尝试 1/36 - 错过

尝试 2/36 - 射击

尝试 3/36 - 错过等...,一直到 36 次可能中的 9 次。

顺序并不重要,我只需要在 36 次尝试中随机出现所有 9 个。

感谢任何帮助。

编辑:对不起,如果我是模棱两可的。这是我的问题:

我有一个事件,比如说“射击”。 我希望它发生 $occurace = 9 次,但随机发生在 36 个可能的机会中。

就像我说的:

try1 - 错过 try2 - 射击 try3 - 射击 ... try35 - 小姐 try36 - 错过

再次运行代码,我想改变一下,比如:

try1 - 射击 try2 - 错过 try3 - 射击 ... try35 - 小姐 try36 - 射门

我需要 9 个事件在 36 个机会中随机发生,但我希望它们全部发生,而不是没有或超过 9 个

【问题讨论】:

  • 我不确定我是否理解这个问题。您只想选择 9 次 1 到 36 之间的数字吗?
  • missshoot 是从哪里来的?
  • 如果您只是想要随机数,那么有时您应该可以在开头全部 9 或结尾全部 9,因为这就是随机数的工作方式。它们的分布是随机的。
  • PHP 有一个很好的随机数生成器,它可以选择一个范围内的随机数,也可以从一个数组中选择随机元素。我相信其中之一会解决你的问题,不管它是什么。
  • 请提供更多信息,因为问题似乎很混乱。

标签: php events random


【解决方案1】:

给你:

$spots = array();

while (count($spots) < 9) {
    $rand = rand(1,36);
    if (!isset($spots[$rand])) {
        $spots[$rand] = TRUE;
    }
}

$spots = $spots + array_fill(1, 36, FALSE);
ksort($spots);

总会有 9 个 TRUE/Shoot 点,其余的是 FALSE/Miss 点。它是真正随机的,它们可以在数组中的任何位置。

数组中的一个简单的foreach $spots 将告诉您何时“射击”

【讨论】:

  • 没问题,尽管我应该提醒您,由于您有一个新帐户并且您的第一个问题为 -5,您可能无法发布问题,直到您回答关于stackoverflow的一些问题(并获得好成绩)。
  • 好的,谢谢你的建议
  • 另外,我应该提到ksort() 是必须的,没有它,所有的“拍摄”都会在开始时发生。
  • 是的,我知道了,我刚刚测试了你写的代码,它完美地工作。它以最好的方式满足我的需求:)
猜你喜欢
  • 2013-10-21
  • 1970-01-01
  • 2014-02-01
  • 2013-05-01
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多