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 ?

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 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-04 05:53:09272parcourir

How can I generate all unique combinations of 5 numbers from an array of 7 numbers (1, 2, 3, 4, 5, 6, 7) using 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 &amp;&amp; $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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn