Skip to Content
PHP Cookbook
book

PHP Cookbook

by David Sklar, Adam Trachtenberg
November 2002
Intermediate to advanced
640 pages
16h 33m
English
O'Reilly Media, Inc.
Content preview from PHP Cookbook

4.20. Randomizing an Array

Problem

You want to scramble the elements of an array in a random order.

Solution

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

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.

See Also

Recipe 4.22 for a function that simulates shuffling a deck of cards; documentation on shuffle( ) at http://www.php.net/shuffle.

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

PHP Cookbook

PHP Cookbook

Eric A. Mann
PHP Cookbook, 2nd Edition

PHP Cookbook, 2nd Edition

Adam Trachtenberg, David Sklar
PHP Cookbook, 3rd Edition

PHP Cookbook, 3rd Edition

David Sklar, Adam Trachtenberg
Programming PHP

Programming PHP

Rasmus Lerdorf, Kevin Tatroe

Publisher Resources

ISBN: 1565926811Supplemental ContentCatalog PageErrata