【问题标题】:How to get a specific number of random elements from an array in php?如何从php中的数组中获取特定数量的随机元素?
【发布时间】:2021-12-22 13:01:17
【问题描述】:

所以,我一直在尝试为“骰子生成器”编写代码,我希望它生成随机数(从 1 到 6)x 次。 x 的次数由用户通过终端作为参数给出,使用这个“$argc argv”函数,但这并不重要。

我想知道的是:如何生成随机值x次?

举例:

用户输入:4

输出:5 3 6 8

用户输入:3

输出:5 1 2

这就是我想要写的。我用array_rand函数,以数组为参数,第二个参数是我想要的次数,但是不行!我在这里没有得到什么?

<?php

if ($argc < 2) {
    print "You have to write at least one parameter" .PHP_EOL;
    exit(1);
}
//This is the variable that corresponds to the number of times the user will give on the Terminal as a parameter.
//$randoms = $argv[1];
$num = 3;
$diceNumbers = [1, 2, 3, 4, 5, 6];
$keys = array_rand($diceNumbers, $num);

print $diceNumbers[$keys[0]]." ".$diceNumbers[$keys[1]] .PHP_EOL;

?>

【问题讨论】:

  • 没有理由,它似乎并没有以这种方式工作! :D 它总是只返回 2 个随机值,而不是我想要的数字
  • 但是你只输出两个值。 $diceNumbers[$keys[2]] 也存在。

标签: php arrays random


【解决方案1】:

鉴于您的用例是“掷骰子”,我想知道您是否最好使用像 random_int() 这样的加密安全随机数生成函数而不是 array_rand(),这不是.

然后,您可以使用 for 循环作为您的输出,因为您事先知道您希望循环运行多少次。

$num = 3;

for($i = 0; $i < $num; $i++){
    print random_int(1,6) . PHP_EOL;
}

【讨论】:

    【解决方案2】:

    array_rand(arry, n) 函数返回一个长度为 n 的数组,由来自 arry 的元素组成。看起来你做的一切都是正确的,但是当你打印它时,你只要求前 2 个随机数。如果要打印所有数字,则需要一个 for/foreach 循环。

    foreach($keys as $key) {
        print $key . " ";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 2019-12-10
      相关资源
      最近更新 更多