【问题标题】:Random array, showing less than 3 of the same随机数组,显示少于 3 个相同的
【发布时间】:2014-02-07 20:32:53
【问题描述】:

我在抽奖类型脚本中使用随机 PHP 数组,有时我会得到相同的字符串 3 次或更多次。如何将随机数限制为最多显示 2 个相同的字符串?

例如我有:

  <?php
  $raffle = array('string1', 'string2', 'string3', 'string4', 'string5', 'string6');

  echo $raffle[array_rand($raffle)] . ", " . $raffle[array_rand($raffle)] . ", " .   $raffle[array_rand($raffle)] . ", " . $raffle[array_rand($raffle)];
  ?>

所以它从数组中随机选择 4 个字符串,但我不希望同一个字符串出现两次以上。我怎样才能做到这一点?

【问题讨论】:

  • 但是同一个出现两次可以吗?不是三遍吗?对吗?
  • 使用 while 循环并仅在值显示 2 次或更少时停止它
  • @DamienBlack,是的,两次是可以的,但不是更多。
  • @RazHarush,while 循环可以正常工作,但是如果显示两次,我该如何让它停止该值

标签: php arrays random


【解决方案1】:

下面是一个函数,它将存储已选择的内容,如果再次选择,则将其从数组中删除。一旦从阵列中移除,它将永远不会被再次选中。所以项目可以显示两次,但不会更多:

function pull_raffle() {
    static $raffle = array('string1', 'string2', 'string3', 'string4', 'string5', 'string6');
    static $pulled_before = array();

    $pick = array_rand($raffle);
    $string = $raffle[$pick];
    if (array_key_exists($string, $pulled_before)) {
        unset($raffle[$pick]);
    } else {
        $pulled_before[$string] = true;
    }

    return $string;
}

像这样使用它:

echo pull_raffle() . ", " . pull_raffle(). ", " .  pull_raffle() . ", " . pull_raffle();

【讨论】:

  • 这是有道理的,但该函数似乎无法正常使用静态“解析错误:语法错误,意外'静态'(T_STATIC),期望'&'或变量(T_VARIABLE) "
  • 我应该在函数之外使用字符串变量吗?
  • @Faded 那是因为“功能”缺少两个关键字符。
  • @Faded 抱歉,我的复制肯定失败了。立即尝试。
猜你喜欢
  • 1970-01-01
  • 2011-02-27
  • 2020-12-10
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
相关资源
最近更新 更多