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
|
<?php
/**
* Retourne tous les combinaisons des éléments de $tab
* de taille $taille ou inférieure (de taille supérieure ou égale à 1)
* @param array $tab tableau des éléments de base
* @param int taille maximale des combinaisons résultantes
* @return array toutes les combinaisons
*/
function combinaisons(array $tab, $taille)
{
// Cas de base : pour une taille de 1, on retourne simplement le tableau
if ($taille == 1) {
return $tab;
}
else {
// Cas général :
// Tableau de résultats final
$result = array();
// Calcul des combinaisons pour la taille inférieure (appel récursif)
$combinaisons = combinaisons($tab, $taille - 1);
// Création des nouvelles combinaisons à partir de celle de taille inférieure:
// On ajoute chaque caractère de départ devant chacune des combinaisons trouvées
foreach($tab as $caractere) {
foreach($combinaisons as $combinaison) {
$result[] = $caractere . $combinaison;
}
}
// Le résultat est aussi bien les combinaisons de taille inférieure que celle générées
// On met donc les deux ensemble
$result = array_merge($result, $combinaisons);
return $result;
}
}
echo 'test 1 array("a", "b"), taille 2';
var_dump(combinaisons(array("a", "b"), 2));
echo 'test 2 array("a", "b"), taille 3';
var_dump(combinaisons(array("a", "b"), 3));
echo 'test 3 array("a", "b", "c"), taille 3';
var_dump(combinaisons(array("a", "b", "c"), 3));
?> |
Partager