Перемешать массив в php легко, но моя проблема в том, что я пытаюсь перетасовать его, не получая тот же результат раньше, чем после этого ключа.
Пример:
Array ( 0 => 1, 1 => 2, 2 => 3, 3 => 3 )
У меня должен быть результат без 3 совместных действий.
Пример некоторого массива, который я хочу:
Array ( 0 => 2, 1 => 3, 2 => 1, 3 => 3 )
Я попытался проверить каждый элемент массива, если это произойдет, я снова перетасовываю его и проверяю другое время. Но это похоже на то, что они теряют время и процесс.
EDIT: Вот код, который я использую:
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: также было бы неплохо проверить, возможно ли даже перетасовать входной массив ожидаемым образом, чтобы вы не попали в бесконечный цикл.
Из списка Shuffle, гарантируя, что элемент не останется в одном положении
<?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