If you’re running PHP 4.3 or above, use
shuffle( )
:
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);
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.
Recipe 4.22 for a function that simulates
shuffling a deck of cards; documentation on shuffle( )
at http://www.php.net/shuffle.
Get PHP Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.