Shuffle Array
The shuffle function randomly sorts the order of the values in an array. It does not maintain the keys/values association.
<?php $a = [1,2,3,4,5]; shuffle($a); print_r($a); /*outputs Array ( [0] => 4 [1] => 5 [2] => 1 [3] => 2 [4] => 3 ) */
You can use shuffle with an associative array, but the keys will lose:
<?php $a = ['one'=>1,'two'=>2,'three'=>3,'four'=>4,'five'=>5]; shuffle($a); print_r($a); /*outputs Array ( [0] => 5 [1] => 4 [2] => 2 [3] => 1 [4] => 3 ) */
Shuffle Associative Array
To shuffle associative arrays, we created a shuffleAssociative
function:
<?php function shuffleAssociative ($a){ $keys = array_keys($a); shuffle ($keys); $newArray = []; foreach ($keys as $v){ $newArray[$v] = $a[$v]; } return $newArray; }
The array_keys
function returns an array of all the keys in the associative array. We shuffled the keys and returned a new Array created with shuffled keys. See the complete example:
<?php function shuffleAssociative ($a){ $keys = array_keys($a); shuffle ($keys); $newArray = []; foreach ($keys as $v){ $newArray[$v] = $a[$v]; } return $newArray; } $a = ['one'=>1,'two'=>2,'three'=>3,'four'=>4,'five'=>5]; $b = shuffleAssociative($a); print_r($b); /*outputs Array ( [three] => 3 [two] => 2 [four] => 4 [one] => 1 [five] => 5 ) */
array_rand
get random elements out of arrays
With array_rand()
, one or more random elements out of an array are determined by random.
<?php //Syntax array_rand(array $array, int $num = 1): int|string|array
The first parameter for this function is the array; the second (optional) one is the number of elements to be returned. This function returns an array of keys if you want 2 or more random elements.
Example: array_rand()
<?php $a = ['one'=>1,'two'=>2,'three'=>3,'four'=>4,'five'=>5]; $b = [1,2,3,4,5]; $r = array_rand($a); echo $a[$r]; //2 $r = array_rand($b); echo $b[$r]; //4 $r = array_rand($b, 2); foreach ($r as $v) echo $b[$v]. ' '; // 3 5
If you do not want to pick random elements but want to randomize the order of elements in the array (for example, when shuffling a deck of cards), use the shuffle()
function.
More Posts on PHP Sorting Arrays: