Combinaisons de tableaux PHP
Cette question cherche une méthode efficace pour générer toutes les combinaisons possibles de 5 nombres à partir d'un tableau de 7 nombres, sans tenir compte de leur commander.
Une solution est fournie par le code trouvé ici : http://stereofrog.com/blok/on/070910. Vous trouverez ci-dessous le code pour votre référence :
class Combinations implements Iterator { protected $c = null; protected $s = null; protected $n = 0; protected $k = 0; protected $pos = 0; function __construct($s, $k) { 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(); } function key() { return $this->pos; } 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); } function next() { if($this->_next()) $this->pos++; else $this->pos = -1; } function rewind() { $this->c = range(0, $this->k); $this->pos = 0; } function valid() { return $this->pos >= 0; } 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; } } foreach(new Combinations("1234567", 5) as $substring) echo $substring, ' ';
Ce code définit une classe Iterator qui génère des combinaisons d'une taille donnée à partir d'une chaîne ou d'un tableau fourni. Le résultat de l'exemple donné dans la question ("1234567", 5) serait :
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!