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

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

Решение
Если у вас запущена версия 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( ), эта функция возвращает перемешанный массив, а не изменяет его по месту. Она также требует плотно упакованного массива с целочисленными ключами.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Добавление одного массива к другому
Изменение длины массива
Инициализация массива диапазоном
Инициализация массива диапазоном целых чисел
Нахождение всех перестановок массива

Вернуться в раздел: PHP / 4. Массивы