shuffle
Эта функция перемещает элементы массива в случайном порядке.
Example#1 Пример использования shuffle()
$numbers = range ( 1 , 20 );
srand ((float) microtime () * 1000000 );
shuffle ( $numbers );
while (list(, $number ) = each ( $numbers )) echo «$number » ;
>
?>?php
Note: Начиная с PHP 4.2.0, больше нет необходимости инициализировать генератор случайных чисел функциями srand() или mt_srand(), поскольку теперь это происходит автоматически.
Перемешать значения в массиве
Нужно, чтобы значения из массива всегда выводились в случайном порядке. Пробовал array_rand, но эта функция перемешивает только ключи массива.
Отслеживать
задан 15 апр 2019 в 15:15
Денис Небесный Денис Небесный
747 4 4 серебряных знака 13 13 бронзовых знаков
15 апр 2019 в 15:18
Функция array_rand дает случайный порядок ключей из массива. Если пройтись по этому набору и вывести значения соответствующие ключам — тоже получите случайные последовательности.
15 апр 2019 в 15:56
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
$array = array('N1', 'N2', 'N3', 'N3', ); shuffle($array); for ($i=0; $i
Отслеживать
ответ дан 15 апр 2019 в 15:18
9,204 4 4 золотых знака 24 24 серебряных знака 47 47 бронзовых знаков
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как перемешать php массив в случайном порядке
В PHP есть встроенная функция shuffle() , которая принимает на вход массив и перемешивает его в случайном порядке. Массив передаётся в функцию по ссылке. Давайте посмотрим на пример. Попробуем дважды перемешать один и тот же массив.
$collection = ['hexlet', 1, 69, 'awesomeness']; shuffle($collection); print_r($collection); //=> [1, 'hexlet', 'awesomeness', 69] shuffle($collection); print_r($collection); //=> [69, 'awesomeness', 1, 'hexlet']
Тут видно, что изменяется сам изначальный массив.
shuffle
Функция перемешивает элементы массива в случайном порядке.
Предостережение
Функция не создаёт криптографически защищённые значения и не должна использоваться для криптографических целей или целей, требующих, чтобы возвращаемые значения были недоступны для разгадывания.
Если требуется криптографически безопасная случайная последовательность, Random\Randomizer может использоваться с движком Random\Engine\Secure . Для простых случаев использования функции random_int() и random_bytes() предоставляют удобный и безопасный API, поддерживаемый CSPRNG операционной системы.
Список параметров
Возвращаемые значения
Функция всегда возвращает true .
Список изменений
| Версия | Описание |
|---|---|
| 7.1.0 | Внутренний алгоритм получения случайных чисел изменён с функции rand библиотеки libc на генератор на базе » Вихря Мерсена. |
Примеры
Пример #1 Пример использования shuffle()
$numbers = range ( 1 , 20 );
shuffle ( $numbers );
foreach ( $numbers as $number ) echo » $number » ;
>
?>?php
Примечания
Замечание: Эта функция присваивает новые ключи элементам array . Она удалит все существующие ключи, а не просто переупорядочит их.
Замечание:
Сбрасывает внутренний указатель массива на первый элемент.
Смотрите также
- Random\Randomizer::shuffleArray() — Получает перестановку массива
- Random\Randomizer::shuffleBytes() — Получает байтовую перестановку строки
- Random\Randomizer::pickArrayKeys() — Выбирает случайные ключи массива
- Сравнение функций сортировки массивов
User Contributed Notes 16 notes
14 years ago
shuffle for associative arrays, preserves key=>value pairs.
(Based on (Vladimir Kornea of typetango.com)’s function)
foreach( $keys as $key ) $new [ $key ] = $array [ $key ];
>
return true ;
>
?>
*note: as of PHP 5.2.10, array_rand’s resulting array of keys is no longer shuffled, so we use array_keys + shuffle.
13 years ago
Shuffle associative and non-associative array while preserving key, value pairs. Also returns the shuffled array instead of shuffling it in place.
function shuffle_assoc ( $list ) <
if (! is_array ( $list )) return $list ;
$keys = array_keys ( $list );
shuffle ( $keys );
$random = array();
foreach ( $keys as $key )
$random [ $key ] = $list [ $key ];
14 years ago
I needed a simple function two shuffle a two dimensional array. Please note the second level arrays must be indexed using integers, for example $myarray[0][«Name»] and not $myarray[«One»][«Name»]. Here is the function:
function twodshuffle ( $array )
// Get array length
$count = count ( $array );
// Create a range of indicies
$indi = range ( 0 , $count — 1 );
// Randomize indicies array
shuffle ( $indi );
// Initialize new array
$newarray = array( $count );
// Holds current index
$i = 0 ;
// Shuffle multidimensional array
foreach ( $indi as $index )
$newarray [ $i ] = $array [ $index ];
$i ++;
>
return $newarray ;
>
?>
Please note it only works on two dimensional arrays. Here is an example:
$myarray = array( «Google» => array( «Name» => «Google» , «URL» => «www.google.com» , «Usage» => «Googling» ), «Yahoo» => array( «Name» => «Yahoo» , «URL» => «www.yahoo.com» , «Usage» => «Yahooing?» ), «Ask» => array( «Name» => «Ask» , «URL» => «www.ask.com» , «Usage» => «Asking Jeeves» ));
print_r ( twodshuffle ( $myarray ));
/* And the result is:
Array ( [0] => Array ( [Name] => Ask [URL] => www.ask.com [Usage] => Asking Jeeves ) [1] => Array ( [Name] => Google [URL] => www.google.com [Usage] => Googling ) [2] => Array ( [Name] => Yahoo [URL] => www.yahoo.com [Usage] => Yahooing? ) )
*/
?>
Hope you find it useful!
14 years ago
Building on examples by m227 and pineappleclock, here is a function that returns all permutations of each set in the power set of an array of strings (instead of a string). Thanks for the great examples!
/*
Use: $arr = power_perms($in);
Example:
$in = array(«A»,»B»,»C»);
$power_perms = power_perms($in);
function power_perms ( $arr )
$power_set = power_set ( $arr );
$result = array();
foreach( $power_set as $set ) $perms = perms ( $set );
$result = array_merge ( $result , $perms );
>
return $result ;
>
function power_set ( $in , $minLength = 1 )
$count = count ( $in );
$members = pow ( 2 , $count );
$return = array();
for ( $i = 0 ; $i < $members ; $i ++) $b = sprintf ( "%0" . $count . "b" , $i );
$out = array();
for ( $j = 0 ; $j < $count ; $j ++) if ( $b < $j >== ‘1’ ) $out [] = $in [ $j ];
>
if ( count ( $out ) >= $minLength ) $return [] = $out ;
>
>
//usort($return,»cmp»); //can sort here by length
return $return ;
>
function factorial ( $int ) if( $int < 2 ) return 1 ;
>
for( $f = 2 ; $int — 1 > 1 ; $f *= $int —);
function perm ( $arr , $nth = null )
if ( $nth === null ) return perms ( $arr );
>
$result = array();
$length = count ( $arr );
while ( $length —) $f = factorial ( $length );
$p = floor ( $nth / $f );
$result [] = $arr [ $p ];
array_delete_by_key ( $arr , $p );
$nth -= $p * $f ;
>
$result = array_merge ( $result , $arr );
return $result ;
>
function perms ( $arr ) $p = array();
for ( $i = 0 ; $i < factorial ( count ( $arr )); $i ++) $p [] = perm ( $arr , $i );
>
return $p ;
>
function array_delete_by_key (& $array , $delete_key , $use_old_keys = FALSE )
unset( $array [ $delete_key ]);
if(! $use_old_keys ) $array = array_values ( $array );
>