Create a array of 52 integers, shuffle them, and map them to cards:
$suits = array('Clubs', 'Diamonds', 'Hearts', 'Spades'); $cards = array('Ace', 2, 3, 4, 5, 6, 7, 8, 9, 10, 'Jack', 'Queen', 'King'); $deck = pc_array_shuffle(range(0, 51)); while (($draw = array_pop($deck)) != NULL) { print $cards[$draw / 4] . ' of ' . $suits[$draw % 4] . "\n"; }
This code uses the pc_array_shuffle( )
function
from Recipe 4.21.
Here, a pair of arrays, $suits
and
$cards
, is created to hold the English
representation of a card. The numbers 0
through
51
are randomly arranged and assigned to
$deck
. To deal a card, just pop them off the top
of the array, treating the array like a literal deck of cards.
It’s necessary to add the check against
NULL
inside the while
,
otherwise the loop terminates when you draw the zeroth card. If you
modify the deck to contain the numbers 1 through 52, the mathematics
of deciding which number belongs to which card becomes more complex.
To deal multiple cards at once, call array_slice( )
:
array_slice($deck, $cards * -1);
Recipe 4.21 for a function that randomizes an
array; documentation on array_slice( )
at
http://www.php.net/array-slice.
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.