Рандомизация массива

Задача
Необходимо перетасовать элементы массива в случайном порядке.

Решение
Если у вас запущена версия PHP 4.3 или выше, то используйте функцию shuffle():

shuffle($array);


С более ранними версиями используйте функцию pc_array_shuffle(),
показанную в примере 4.4.

Пример 4.4. pc_array_shuffle()

function pc_array_shuffle($array) {
$i = count($array);
while(--$i) {
$j = mt_rand(0, $i);
if ($i != $j) {
// перестановка элементов
$tmp = $array[$j];
$array[$j] = $array[$i];
$array[$i] = $tmp;
}
}
return $array;
}


Ниже приведены примеры:

$cards = range(1,52); // deal out 52 "cards"
$cards = pc_array_shuffle($cards);


Обсуждение
В PHP уже существует функция shuffle() для перемешивания массивов, однако в PHP 4.2.2 она работает некорректно. Встроенный алгоритм перемешивания имеет тенденцию давать предпочтение одним определенным перестановкам перед другими. Последние перестановки выглядят случайными, но так как элементы в каждой конкретной позиции имеют разные шансы оказаться в конце процесса, то такая перетасовка является недостоверной. Это исправлено в PHP 4.3.

Функция pc_array_shuffle(), известная как перестановка Фишера-Йетса, одинаково распределяет элементы вдоль массива. Используйте ее с версиями PHP более ранними, чем 4.3. В отличие от shuffle( ), эта функция возвращает перемешанный массив, а не изменяет его по месту. Она также требует плотно упакованного массива с целочисленными ключами.
Теги:
shuffle
Добавлено: 21 Июля 2018 07:27:33 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...