【问题标题】:PHP Array function to return random integersPHP Array 函数返回随机整数
【发布时间】:2017-08-20 23:32:02
【问题描述】:

我是 PHP 新手,我正在尝试创建一个函数,该函数生成并返回一个包含 6 个随机数的排序数组,然后打印它。我目前的代码如下:

    function getRow($ball){
        $ball = array();
        for($i=1;$i<=6;$i++){
            return $ball;
        }
        sort($ball);   
    }

    echo '<pre>';
    print_r(getRow(rand(1,59)));
    echo '</pre>';

问题在于我不知道为什么它只打印数组中的 1 个随机数。如果我出错了,谁能帮我解释一下为什么会这样或者我哪里出错了?

【问题讨论】:

  • 您是在 return 循环中使用 for 而不是设置数组的元素。
  • 因为您在 for 循环中执行 return 将从第一次迭代中返回
  • 函数被返回终止!!!
  • 另外,您不是在生成随机数,而是在生成 1,2,3,4,5,6
  • 感谢 cmets!我输入了错误的代码,我已经更新了

标签: php arrays function


【解决方案1】:

而不是调用rand() 6 次然后排序然后返回,您可以在没有for 循环的情况下实现您想要的结果。

function getRow()
{
    $range = range(1, 59);  // generate an array containing [1,2,3,...,58,59]

   shuffle($range);  // shuffle the array

   $ball = array_slice($range, 0, 6);  // extract the first six elements

   sort($ball);  // the sort the six elements ASC

   return $ball;  // return the randomized, truncated, sorted array
}

echo '<pre>';
print_r(getRow());

输出:

Array
(
    [0] => 4
    [1] => 13
    [2] => 16
    [3] => 26
    [4] => 32
    [5] => 52
)

【讨论】:

  • 我正在尝试使用我的朋友的 rand 函数
  • 请添加 cmets 解释每个函数调用创建的内容。你和我都知道你在做什么(我喜欢这种方法),但其他读者可能不会遵循这种方法。
  • 对不起,我不耐烦并编辑了您的答案。如果您不喜欢任何内容,请随意覆盖。请记住总是解释你的答案。为这个答案+1,因为这就是我可能会这样做的方式(即使 RiggsFolly 的方式可能表现更好)。
【解决方案2】:

试试这个吧,你原来的代码问题太多了

$ball = [];
for($i=1;$i<=6;$i++){
    $ball[] = rand(1,59);
}
sort($ball); 
echo '<pre>';
print_r($ball);
echo '</pre>';

结果

Array
(
    [0] => 3
    [1] => 16
    [2] => 20
    [3] => 32
    [4] => 39
    [5] => 51
)

或者,使用函数

function getRow()
{
    $ball = [];
    for($i=1;$i<=6;$i++){
        $ball[] = rand(1,59);
    }
    sort($ball); 
    return $ball;
}

echo '<pre>';
print_r(getRow());
echo '</pre>';

【讨论】:

  • 我很欣赏代码,但我试图通过使用函数来解决这个问题,而不仅仅是一个普通的数组。
  • 好的,试试我的第二个建议
  • 太棒了!像魅力一样工作。了解了您的方法后,我现在知道我哪里出错了。
【解决方案3】:

以下是您的程序文件中需要更正的点。

  1. 您将单个随机值传递给$ball 变量。它需要是一个带有随机数的数组。

  2. 在您的for 循环中,您返回值——这意味着函数在第一次迭代时退出。所以 value = 1 被返回并打印。

  3. 需要返回排序后的数组。

你可以用这个:

$ball = array();
function getRow($ball){
    for($i=0; $i<6; $i++){
        $ball[$i] = rand(1,1000);
    }
    sort($ball);
    return $ball;
}
$sorted_array = getRow($ball);

echo '<pre>';
print_r($sorted_array);
echo '</pre>';

【讨论】:

  • 欢迎来到 SO。我很高兴看到您在回答中包含了一些解释(许多新发帖人没有执行此必要步骤)。我已经为您重新格式化了您的代码块。您应该使用 4 个空格,而不是使用反引号来表示您的代码。更快的方法是突出显示所有代码块,然后按Ctrl+K,SO 软件将格式化您的代码。最后,您的答案中不需要&lt;?php?&gt;,除非您在答案中跳进跳出HTML/PHP。
  • 谢谢伙计!下次会注意的。
猜你喜欢
  • 2014-11-16
  • 2014-09-15
  • 1970-01-01
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-29
  • 2011-06-26
相关资源
最近更新 更多