Разработчику. Сборник рецептов PHP
Задавайте вопросы

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

Вернуться назад

Задача

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

Решение

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

shuffle($array);

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

Пример 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() на http://www.php.net/shuffle

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования


Рейтинг Сайтов ДОСКИ.РУ