PHP生成随机混洗序列

时间:2017-05-21 22:40:05

标签: php arrays random

我正在尝试生成一个随机数组(如果我使用的是右边的术语),WITH可能重复,但不是彼此相邻,而是出于给定的数组。

Ex与变量:狮子老虎熊猴子大象

我希望能够产生一条线,但有可能:“狮子和老虎和熊”或“熊和狮子和猴子和大象”或“猴子和大象”或“大象和狮子和大象和老虎“

所以它需要随机数量的可能性(不少于两个 - 所以“熊和老虎”和任何其他产品有两个选项将是最小的 - 但也不超过七个。)再次,我希望变量可以复制,但不能彼此相邻,所以像“猴子,狮子,老虎和猴子”这样的东西是可能的。

由于我对PHP知之甚少,这只是我尝试过的一个选项:

<?php 
$input_array = array("lions", "tigers", "bears", "monkeys", "elephants");
$rand_keys = array_rand($input, 2);
echo $input[$rand_keys[0]] . "\n";
echo $input[$rand_keys[1]] . "\n";
?>

但是因为它只生成两个元素的静态数量并且不重复,所以它不会产生我想要做的事情。

任何帮助都会受到赞赏,特别是如果它包含在每个变量之间放置单词“and”的代码,并且还打印它们(而不是生成算法) - PHP对我来说很新,我不确定怎么做而不搞乱。

2 个答案:

答案 0 :(得分:0)

所以你想做的是以下几点:

首先,您需要设置应该有多少个混洗元素。

$num = rand(2,7); // get random number between 2 and 7

然后你多次遍历你的$ input_array。同时检查其中的最后一个条目是否等于新添加的条目,在这种情况下,跳过迭代并再次掷骰子。

$rand_keys = array();
while($num>0){ // repeat as long as $num is not zero
    $rand_key = $input_array[rand(0,count($input_array)-1)]; // select random key from input_array
    if(count($rand_keys)==0 || $rand_keys[count($rand_keys)-1]!=$rand_key){ // check if either this is the first element to add, or if the last element added is not equal to the new one
        $rand_keys[] = $rand_key; // push new key into rand_keys
        $num--;
    }
}

现在你的$ rand_keys数组应该包含所需的随机密钥。

PS:将此数组转换为类似于示例的字符串,使用implode(' and ',$rand_keys);

答案 1 :(得分:0)

输入:

$input_array=["lions","tigers","bears","monkeys","elephants"];

方法:

$count=mt_rand(2,7);                  // declare number of elements to extract
echo "Count = $count\n";              // display expected element count

$result=[];
while(sizeof($result)<$count){        // iterate until count is fulfilled
    if(($new_val=$input_array[array_rand($input_array)])!=end($result)){
        $result[]=$new_val;           // add new value if different from previous value
    }
}
echo implode(' and  ',$result);       // display values (joined by ' and ')

一些潜在产出:

Count = 6
monkeys and tigers and bears and tigers and monkeys and bears

Count = 2
elephants and lions

Count = 7
lions and bears and lions and elephants and monkeys and elephants and lions