1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| /**
* @brief Calculates the cartesian product of any number of array in parameter
*
* @ingroup Functions
* @param mixed $a
* @param mixed $b [...]
* @return array
*/
function array_cartesian_product () {
if (!$c = func_num_args())
return array();
if ($c == 1) {
foreach ((array)func_get_arg(0) as $v)
$r[] = (array)$v;
return $r;
}
$a = func_get_args();
$f = array_shift($a);
$s = call_user_func_array(__FUNCTION__, $a);
foreach ((array)$f as $v) {
foreach ($s as $w) {
array_unshift($w, $v);
$r[] = $w;
}
}
return $r;
}
$colors = array('Pique', 'Coeur', 'Carreau', 'Trèfle');
$values = array_merge(range(2,10), array('Valet', 'Dame', 'Roi', 'As'));
// créer le jeu de cartes
$deck = array_map('implode', array_cartesian_product($values, ' de ', $colors));
// mélanger
shuffle($deck);
// tirer deux cartes
var_dump( array_pop($deck) );
var_dump( array_pop($deck) ); |
Partager