Перемешивание 2 одинаковых массивов без их сопоставления, PHP поможет? - PullRequest
0 голосов
/ 22 ноября 2011

У меня есть 2 одинаковых массива с целыми числами.Я пытаюсь перетасовать оба массива, чтобы числа не повторялись и чтобы они не совпадали.Например:

Если у массива 1 есть 4 входа {1, 2, 3, 4), а у массива 2 есть 4 входа {1, 2, 3, 4).Мне нужно, чтобы они были перетасованы, чтобы элементы в Array1 не совпадали с элементами в Array 2.

Код, который у меня есть:

    $Array1 = array();
    $Array2 = array();

while($row = mysql_fetch_assoc($result))
{   
    $Array1[] = $row['id'];
    $Array2[] = $row['id']; 
}
shuffle($Array1);
shuffle($Array2);
array_unique($Array1);
array_unique($Array2);
    for($i = 0; $i < sizeof($Array1); $i++)
    {
        if($Array1[$i] == $Array2[$i])
        {
            array_rand($Array1);
            array_rand($Array2);
            array_unique($Array1);
            array_unique($Array2);
        }
    }

Без array_rand () и array_unique() в операторе if вывод правильно перетасован без повторяющихся чисел в обоих массивах, однако я все еще получаю совпадения.Любая помощь?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2011
$Array1 = $Array2 = array(1,2,3,4);
$Array1 = array_unique($Array1); 
$Array2 = array_unique($Array2);

if (count($Array1) == 1 && count($Array2) == 1 && $Array1 == $Array2) {
   die("Arrays can never be randomized differently");
}  

shuffle($Array1);

do {
   shuffle($Array2);
}  
while (array_intersect_assoc($Array1, $Array2));

var_dump($Array1, $Array2);
0 голосов
/ 22 ноября 2011

Мне кажется, этого должно быть достаточно:

shuffle($array1);
$array2 = $array1;
$array2[] = array_shift($array2);

Это зависит от того, насколько случайным вам это действительно нужно.

...