【问题标题】:array_rand not working as expected in PHParray_rand 在 PHP 中没有按预期工作
【发布时间】:2016-08-29 09:40:54
【问题描述】:

我刚开始接受 PHP 培训,就在玩 PHP。我遇到了 array_rand 函数,它返回随机索引,你可以控制你想要多少随机索引。但是如果随机索引的数量保持等于数组的实际长度呢?我试过了,结果出人意料。

<?php
$arr = array(1,2,3,4,5,6);
$temp = array_rand($arr,6);
foreach($temp as $r){
    echo $arr[$r]." ";
}
?>

所以,我将所有索引随机化并再次打印相同的数组,但是按照 array_rand 返回的顺序。请注意,我不是在为这段代码寻找替代方案,因为我只是在练习。我想知道的是为什么随机函数返回数组( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 ) [如果你打印 array_rand 结果]?为什么在这种情况下它不是随机的?

【问题讨论】:

    标签: php arrays random php-5.6


    【解决方案1】:

    array_rand 是从给定数组中选择一些随机索引。例如,它可能为您提供 1,3,4 个索引或 3,5,6 个索引。但不是5,2,4(至少函数的目的不是那个)。

    如果你想随机化一个数组的索引,你必须使用shuffle

    http://php.net/manual/en/function.shuffle.php

    【讨论】:

    • 谢谢!现在我懂了。所以基本上,虽然它返回随机索引,但它们仍然是有序的(据我观察,升序)。因此,如果索引的数量等于数组的长度,它们根本就不是随机的。太棒了,谢谢你把这个放在我的雷达上。我会改用随机播放功能。
    【解决方案2】:

    只需在 arry_rand 之后再添加一步,shuffle();所以你的代码将是:

    <?php
    $arr = array(1,2,3,4,5,6);
    $temp = array_rand($arr,6);
    shuffle($temp);
    foreach($temp as $r){
        echo $arr[$r]." ";
    }
    ?>
    

    因为作为前。答案解释了平均值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-12
      • 2012-01-16
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多