在之前或之后洗涤没有相同值的php数组

时间:2012-09-02 22:49:52

标签: php arrays shuffle

在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);

2 个答案:

答案 0 :(得分:0)

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

所以你必须手动完成。

PS:检查是否有可能以预期的方式对输入数组进行混洗,这样你就不会进入无限循环。

答案 1 :(得分:0)

来自Shuffle list, ensuring that no item remains in same position

<?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