【问题标题】:Random integer with conditions带条件的随机整数
【发布时间】:2012-05-03 20:40:45
【问题描述】:

我有一个 PHP 脚本,其中有一个整数数组,比如说$forbidden

我想得到一个 1 到 400 之间的随机整数,它不在 $forbidden 中。

当然,我不希望任何循环在 rand 给出工作结果时中断。我想要更有效的东西。

你是怎么做到的?

【问题讨论】:

  • 为什么循环无效?
  • @MichaelRobinson:它无效,因为 $forbidden 可能非常大。 Paul:我曾想过在一个数组中获取所有可能的整数,然后从中获取一个样本,但我想知道该语言中是否有更好的东西
  • @MichaelRobinson:循环是无效的,因为理论上你可以连续击中禁止数字 1000000 次(尽管如果发生这种情况你可能应该去填一些彩票),但是是的。

标签: php random


【解决方案1】:

将所有禁止的数字放在一个数组中,并使用range(1,400) 中的array_diff。你会得到一组允许的数字,用array_rand()随机选择一个。

<?php

$forbidden = array(2, 3, 6, 8);
$complete = range(1,10);
$allowed = array_diff($complete, $forbidden);

echo $allowed[array_rand($allowed)];

这样您就可以从选择集中删除排除的数字,并消除循环的需要:)

【讨论】:

  • 不知道array_diff,找了一阵子!谢谢你的回答。
【解决方案2】:

产生一个允许数字的数组。找出这个数组中的数字。随机选择其中之一。

【讨论】:

    猜你喜欢
    • 2019-02-01
    • 2018-01-20
    • 2014-05-21
    • 2020-01-22
    • 2011-12-10
    • 1970-01-01
    • 2010-11-25
    • 2011-08-19
    • 2022-09-30
    相关资源
    最近更新 更多