【问题标题】:How to use random () function to shuffle array in PHPPHP中如何使用random()函数打乱数组
【发布时间】:2015-09-19 10:50:30
【问题描述】:

在一次采访中,我被要求打乱一个具有类似 .

值的关联数组。
$card = array (
               "car"=>1,
                "bus"=>2,
                "truck"=>3,
);

等等。 使用随机函数在0,1 之间生成随机数字;

他们要求我不要使用任何内置的 PHP 函数。

input: associative array;
output: randomly sequenced associative array;

感谢和问候

【问题讨论】:

  • 看起来像作业!!
  • @b0s3 :) 是的,我已经尝试过做某事,我会更新我的代码,虽然它还没有工作
  • “他们让我不要使用任何内置的 PHP 函数”所以在没有 php 的情况下编写 php - 这将是一项很棒的技能
  • 嗯,如果您要将代码放入您的个人资料中,如何设置有效?
  • @Dagon 实际上,shuffle() 不能开箱即用,因为它会丢失关联键 ;-)

标签: php arrays random


【解决方案1】:

内置的shuffle() 不能很好地处理关联数组,因此您需要打乱数组键,然后重新构造数组。

我正在使用Fisher-Yates-Knuth 算法来执行洗牌,这确实是解决方案的关键。

function myshuffle($arr)
{
    // extract the array keys
    $keys = [];
    foreach ($arr as $key => $value) {
        $keys[] = $key;
    }

    // shuffle the keys    
    for ($i = count($keys) - 1; $i >= 1; --$i) {
        $r = mt_rand(0, $i);
        if ($r != $i) {
            $tmp = $keys[$i];
            $keys[$i] = $keys[$r];
            $keys[$r] = $tmp;
        }
    }

    // reconstitute
    $result = [];
    foreach ($keys as $key) {
        $result[$key] = $arr[$key];
    }

    return $result;
}

【讨论】:

  • 我们不能使用任何内置函数的数组
  • @NullPoiиteя 实际上,OP 说“他们让我不要使用 any 内置的 PHP 函数”.. 包括 rand() 虽然哈哈
  • so true ... so -1 :D 用于使用 foreach、count 和 mt_rand LOL
  • 好东西 foreach 不是内置函数 ;-)
  • 哦,我的坏..它的循环,而且你的洗牌逻辑比我的好,我刚刚弄得一团糟,没想到
【解决方案2】:
    $words = array("adumbrate","antipathy","aspersion","assiduous","cacophony","conundrum");


 $rand_word_index = array_rand($words); // Get any random index from an array

        //  Original Word
 $rand_word = $words[$rand_word_index]; // Stored array value basis of random index


$shuffled = str_shuffle($rand_word); // Shuffle this value or word

echo $shuffled;

【讨论】:

  • 你不能使用内置数组函数..请仔细阅读问题
  • 另外,这给出了一个字符串而不是一个数组。
猜你喜欢
  • 2012-11-25
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 2012-07-18
  • 1970-01-01
相关资源
最近更新 更多