You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何从数组中获取指定数量的随机元素?

问题原因分析

你代码运行不符合预期主要有两个核心问题:

  • 输出逻辑和生成数量不匹配:你代码里固定只打印了前2个随机结果,当你设置$num = 3的时候自然少输出1个值,要是用户输入的生成次数更大,缺失的内容会更多。
  • array_rand功能不符合骰子生成的需求:array_rand的设计逻辑是从数组中选取不重复的随机键,一方面最多只能生成6个结果,传入大于6的次数会直接报错;另一方面骰子滚动是允许出现重复数值的,完全不符合你的使用场景。

另外你给出的示例里输入4输出包含8属于笔误,1-6范围的骰子不会出现8这个结果。

正确实现代码

推荐直接使用random_int(PHP 7.0及以上版本支持,生成的随机数更安全)循环生成指定次数的1-6随机值,实现代码如下:

<?php

if ($argc < 2) {
    print "You have to write at least one parameter" . PHP_EOL;
    exit(1);
}
// 将用户输入的次数转为整数
$num = (int)$argv[1];
// 校验次数合法性
if ($num < 1) {
    print "生成次数不能小于1" . PHP_EOL;
    exit(1);
}

$result = [];
for ($i = 0; $i < $num; $i++) {
    // 生成1到6之间的随机整数
    $result[] = random_int(1, 6);
}

// 用空格拼接结果输出
print implode(' ', $result) . PHP_EOL;
?>

基于array_rand的兼容实现

如果你坚持要使用array_rand函数,需要每次单独调用一次取单个键,循环指定次数,这样才允许出现重复值:

<?php

if ($argc < 2) {
    print "You have to write at least one parameter" . PHP_EOL;
    exit(1);
}
$num = (int)$argv[1];
if ($num < 1) {
    print "生成次数不能小于1" . PHP_EOL;
    exit(1);
}
$diceNumbers = [1, 2, 3, 4, 5, 6];
$result = [];
for ($i = 0; $i < $num; $i++) {
    // 每次只取1个随机键,允许重复
    $key = array_rand($diceNumbers);
    $result[] = $diceNumbers[$key];
}

print implode(' ', $result) . PHP_EOL;
?>

内容的提问来源于stack exchange,提问作者ninna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:45:05