Intereting Posts
Как получить имя текущего шаблона в функции TWIG хранить объекты php в элементе формы html и передавать объекты php через метод GET? Что такое PHP-эквивалент ASPX-обработчиков ashx? Как средний массив на 100 кусков PHP, передающий параметры при создании нового объекта, call_user_func_array для объектов Сложность с объединением 3 таблиц в запросе в php suds.TypeNotFound: Тип не найден: 'MerchantCode' jQuery Validator Plugin – проверка существующего имени пользователя и электронной почты в базе данных mysql PHP usort () ожидает, что параметр 2 будет действительным обратным вызовом, а не классом Как отобразить изображение с помощью пути, хранящегося в базе данных? Stop Warning: date () : from localhost заменить любой URL-адрес в строке текста, на интерактивные ссылки с php Показать запись не найдена с помощью виджета tablesorter. Нужна помощь, возвращающая переменную из моей функции Лучший способ создать пустой объект в JSON с PHP?

PHP shuffle с семенем?

Как я могу заставить функцию shuffle php использовать семя, так что, когда я использую одно и то же семя, функция shuffle выведет тот же массив. Я читал, что тасовка автоматически посеяна. Есть ли способ получить семя этого тасования, или как я могу создать / имитировать тасование с помощью специального семени?

Вы не можете получить семя, используемое в случайном порядке, но вы можете имитировать тасование и исправить собственное семя:

 $array = range(1, 10); function seededShuffle(array &$array, $seed) { mt_srand($seed); $size = count($array); for ($i = 0; $i < $size; ++$i) { list($chunk) = array_splice($array, mt_rand(0, $size-1), 1); array_push($array, $chunk); } } $seed = date('Ymd'); seededShuffle($array, $seed); var_dump($array); 

Каждый день он будет устанавливать другое семя, но в течение дня он будет использовать одно и то же семя и перетасовать массив в том же порядке; завтра будет другая случайная перетасовка сегодня

На сегодняшний день (6 июня 2015 года) последовательность должна быть

 3, 6, 9, 2, 7, 1, 8, 5, 10, 4 

У PHP нет перетасовки с посевом, но вы можете сделать это вместо этого:

 $an_array = array('a','b','c','d'); $indices = array(0,1,2,3); // shuffle the indices and use them as shuffling seed shuffle($indices); // then whenever you want to produce exactly same shuffle use the pre-computed shuffled indices function shuffle_precomputed($a, $shuffled_indices) { $b = $a; // copy array foreach ($shuffled_indices as $i1=>$i2) $a[$i2] = $b[$i1]; return $a; } 

используйте следующее:

 $shuffled_array = shuffle_precomputed($an_array, $indices); 

Вы даже можете использовать систему факторических чисел, чтобы преобразовать массив $shuffled_indices в / из уникального целочисленного числа, которое может использоваться как уникальное семя, а затем просто вычислить случайный случай из факториала, который будет использоваться в функции shuffle_precomputed .

Для дополнительных вариантов shuffle для PHP вы можете увидеть:

  1. PHP – перетасовать только часть массива
  2. Эффективно выбирайте n случайных элементов из массива PHP (без перетасовки)