前后不具有相同值的php数组的Shuffling


Shuffling php array without same value before or after

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

示例:

Array ( 0 => 1, 1 => 2, 2 => 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);

尽管php确实有很多奇怪的函数,但它并没有任何适合描述的情况。

所以你必须手动操作。

PS:另外,检查是否有可能以预期的方式打乱输入数组,这样就不会进入无限循环,这也是一个好主意。

从无序列表中,确保没有项目保持在的同一位置

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