Php перемешать элементы массива случайно

Элементы массива в случайном порядке (PHP)

Отсортировать элементы массива в случайном порядке можно при помощи функции void shuffle(array &$array) . Функция принимает массив по ссылке и сортирует массив в случайном порядке, при это сбрасывая ключи массива.

Пример

‘; print_r($array); // сортируем в случайном порядке shuffle($array); print_r($array); echo ‘‘; ?>

Результат

В результате на экране вы увидите 2 массива, первый исходный, второй отсортированный.

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 ) Array ( [0] => 4 [1] => 5 [2] => 7 [3] => 1 [4] => 8 [5] => 2 [6] => 10 [7] => 6 [8] => 3 [9] => 9 )

Категории

Читайте также

  • Удалить пустые элементы из массива (PHP)
  • Цикл в обратном порядке (PHP)
  • Случайный элемент массива (JavaScript)
  • Получить последнее значение массива (PHP)
  • Умножить массив на число (PHP)
  • Получить первое значение массива (PHP)
  • Сортировка пузырьком (PHP)
  • Поменять местами 2 элемента массива (PHP)
  • Найти и удалить элемент массива (PHP)
  • Получить последовательность элементов массива (PHP)
  • Как объединить два массива (PHP)
  • Количество элементов ассоциативного массива (JavaScript)

Комментарии

Вход на сайт

Введите данные указанные при регистрации:

Социальные сети

Вы можете быстро войти через социальные сети:

Источник

shuffle

Функция перемешивает элементы массива в случайном порядке.

Читайте также:  Head php windows 1251

Функция не создаёт криптографически защищённые значения и не должна использоваться для криптографических целей или целей, требующих, чтобы возвращаемые значения были недоступны для разгадывания.

Если требуется криптографически безопасная случайная последовательность, 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 » ;
>
?>

Примечания

Замечание: Эта функция присваивает новые ключи элементам array . Она удалит все существующие ключи, а не просто переупорядочит их.

Замечание:

Сбрасывает внутренний указатель массива на первый элемент.

Смотрите также

  • Random\Randomizer::shuffleArray() — Получает перестановку массива
  • Random\Randomizer::shuffleBytes() — Получает байтовую перестановку строки
  • Random\Randomizer::pickArrayKeys() — Выбирает случайные ключи массива
  • Сравнение функций сортировки массивов

User Contributed Notes 16 notes

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.

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 ];

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!

There is an function which uses native shuffle() but preserves keys, and their order, so at end, only values are shuffled.

/**
* Array Quake — Give an array good quake so every value will endup with random given space.
* Keys, and their order are preserved.
* @author xZero
* @param array $array
* @return boolean false on failure
*/
function array_quake (& $array ) if ( is_array ( $array )) $keys = array_keys ( $array ); // We need this to preserve keys
$temp = $array ;
$array = NULL ;
shuffle ( $temp ); // Array shuffle
foreach ( $temp as $k => $item ) $array [ $keys [ $k ]] = $item ;
>
return;
>
return false ;
>

// Example
$numbers = array(
‘ZERO’ => 0 ,
‘ONE’ => 1 ,
‘TWO’ => 2 ,
‘THREE’ => 3 ,
‘FOUR’ => 4 ,
‘FIVE’ => 5 ,
‘SIX’ => 6 ,
‘SEVEN’ => 7 ,
‘EIGHT’ => 8 ,
‘NINE’ => 9
);
echo «\nBefore (original):\n» ;
print_r ( $numbers );
array_quake ( $numbers );
echo «\n\nAfter (Array Quake);\n» ;
print_r ( $numbers );
echo «\n» ;
?>

Result example:
Before (original):
Array
(
[ZERO] => 0
[ONE] => 1
[TWO] => 2
[THREE] => 3
[FOUR] => 4
[FIVE] => 5
[SIX] => 6
[SEVEN] => 7
[EIGHT] => 8
[NINE] => 9
)

After (Array Quake);
Array
(
[ZERO] => 4
[ONE] => 2
[TWO] => 0
[THREE] => 8
[FOUR] => 3
[FIVE] => 6
[SIX] => 1
[SEVEN] => 7
[EIGHT] => 5
[NINE] => 9
)

If you want the Power Set (set of all unique subsets) of an array instead of permutations, you can use this simple algorithm:

/**
* Returns the power set of a one dimensional array,
* a 2-D array.
* array(a,b,c) ->
* array(array(a),array(b),array(c),array(a,b),array(b,c),array(a,b,c))
*/
function powerSet ( $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 ;
>
>
return $return ;
>
?>

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!

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 )

if(! $use_old_keys ) $array = array_values ( $array );
>

Источник

PHP shuffle() Function

The shuffle() function randomizes the order of the elements in the array.

This function assigns new keys for the elements in the array. Existing keys will be removed (See Example below).

Syntax

Parameter Values

Technical Details

Return Value: Returns TRUE on success or FALSE on failure
PHP Version: 4+
PHP Changelog: PHP 4.2: The random number generator is seeded automatically

More Examples

Example

Randomize the order of the elements in the array:

Unlock Full Access 50% off

COLOR PICKER

colorpicker

Join our Bootcamp!

Report Error

If you want to report an error, or if you want to make a suggestion, do not hesitate to send us an e-mail:

Thank You For Helping Us!

Your message has been sent to W3Schools.

Top Tutorials
Top References
Top Examples
Get Certified

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Источник

Как перемешать 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'] 

Тут видно, что изменяется сам изначальный массив.

Источник

Оцените статью