Categories

# Shuffle Array and Get Random Elements

If you want to randomize the order of elements in the array use the shuffle() function. Or use array_rand() function to grab one or more random elements out of an array.

## 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
(
 => 4
 => 5
 => 1
 => 2
 => 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
(
 => 5
 => 4
 => 2
 => 1
 => 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.