4.21.1 Problem
4.21.2 Solution
shuffle($array);
If you're running an earlier version, use the
pc_array_shuffle( ) function shown in Example 4-4.
Example 4-4. pc_array_shuffle( )
function pc_array_shuffle($array) {
$i = count($array);
while(--$i) {
$j = mt_rand(0, $i);
if ($i != $j) {
// swap elements
$tmp = $array[$j];
$array[$j] = $array[$i];
$array[$i] = $tmp;
}
}
return $array;
}
Here's an example:
$cards = range(1,52); // deal out 52 "cards" $cards = pc_array_shuffle($cards);
4.21.3 Discussion
There's already a shuffle( ) function in PHP to
shuffle arrays, but as of PHP 4.2.2, it doesn't do its job correctly. The
built-in shuffling algorithm tends to favor certain permutations more than
others. Elements end up looking randomized, but since each element doesn't have
the same chance of ending up in each position, it's not a true shuffle. This is
fixed in PHP 4.3.
pc_array_shuffle( ) , known as the Fisher-Yates shuffle, equally distributes the
elements throughout the array. Use it if you run a version of PHP earlier than
4.3. Unlike shuffle( ), this function returns the scrambled array
instead of modifying it in-place. It also requires a tightly packed array with
integer keys.