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 に答える