Maison >développement back-end >tutoriel php >Comment puis-je générer toutes les combinaisons uniques de 5 nombres à partir d'un tableau de 7 nombres (1, 2, 3, 4, 5, 6, 7) en utilisant PHP ?
Combinaisons de tableaux PHP
Vous recevez un tableau de 7 nombres (1,2,3,4,5,6,7) . Le but est de trouver toutes les combinaisons possibles de 5 nombres de ce tableau. Chaque combinaison doit être unique, ce qui signifie qu'aucun doublon n'est autorisé. Par exemple, (1,2,3,4,5) et (5,4,3,2,1) sont considérés comme la même combinaison.
Solution
Une solution possible consiste à utiliser la classe Combinaisons, qui implémente l'interface Iterator et fournit un moyen de parcourir toutes les combinaisons possibles des nombres donnés. Voici comment cela fonctionne :
class Combinations implements Iterator { protected $c = null; // Combination of numbers protected $s = null; // Source array protected $n = 0; // Number of elements in the array protected $k = 0; // Number of elements in each combination protected $pos = 0; // Current position of the iterator function __construct($s, $k) { // Initialize the class properties if(is_array($s)) { $this->s = array_values($s); $this->n = count($this->s); } else { $this->s = (string) $s; $this->n = strlen($this->s); } $this->k = $k; $this->rewind(); } // Return the current key function key() { return $this->pos; } // Return the current value function current() { $r = array(); for($i = 0; $i < $this->k; $i++) $r[] = $this->s[$this->c[$i]]; return is_array($this->s) ? $r : implode('', $r); } // Move to the next combination function next() { if($this->_next()) $this->pos++; else $this->pos = -1; } // Rewind to the first combination function rewind() { $this->c = range(0, $this->k); $this->pos = 0; } // Check if the iterator is valid (at a valid position) function valid() { return $this->pos >= 0; } // Move to the next combination (internal function) protected function _next() { $i = $this->k - 1; while ($i >= 0 && $this->c[$i] == $this->n - $this->k + $i) $i--; if($i < 0) return false; $this->c[$i]++; while($i++ < $this->k - 1) $this->c[$i] = $this->c[$i - 1] + 1; return true; } } // Create a Combinations object for the given array and number of elements per combination $combinations = new Combinations("1234567", 5); // Iterate over all possible combinations and print them out foreach($combinations as $substring) echo $substring, ' ';
Ce code produit le résultat suivant :
12345 12346 12347 12356 12357 12367 12456 12457 12467 12567 13456 13457 13467 13567 14567 23456 23457 23467 23567 24567 34567
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!