1

在 php 中对数组进行洗牌很容易,但我的问题是当我尝试洗牌而不在该键之前或之后得到相同的结果时。

例子:

Array ( 0 => 1, 1 => 2, 2 => 3, 3 => 3 )

我必须有一个没有 3 的结果。

我想要的一些数组的例子:

Array ( 0 => 2, 1 => 3, 2 => 1, 3 => 3 )

我试图检查数组的每个项目,如果发生这种情况,我会再次对其进行洗牌,然后再检查一次。但这似乎在时间和过程上都是浪费。

编辑: 这是我使用的代码:

do
{
    $not_valid=false;
    for($i=0;$i<sizeof($arr_times)-1;$i++){
        if($arr_times[$i]==$arr_times[$i+1])
            $not_valid=true;
    }
    if($not_valid)
        shuffle($arr_times);
}while ($not_valid);
4

2 回答 2

0

尽管 php 确实有很多奇怪的功能 - 它没有任何用于描述的情况。

所以你必须手动完成。

PS:检查是否有可能以预期的方式对输入数组进行洗牌也是一个好主意,这样你就不会陷入无限循环。

于 2012-09-02T22:59:03.127 回答
0

随机播放列表中,确保没有项目保持在同一位置

<?php
$foo = array(
    0,
    1,
    2,
    3,
    4,
);

for ($i = 0, $c = sizeof($foo); $i < $c - 1; $i++) {
    $new_i = rand($i + 1, $c - 1);
    list($foo[$i], $foo[$new_i]) = array($foo[$new_i], $foo[$i]);
}

var_export($foo); // Derangement
于 2012-09-02T23:10:31.510 回答