ホームページ >バックエンド開発 >PHPチュートリアル >PHP を使用して、7 つの数値 (1、2、3、4、5、6、7) の配列から 5 つの数値の一意の組み合わせをすべて生成するにはどうすればよいですか?
PHP 配列の組み合わせ
7 つの数値 (1、2、3、4、5、6、7) の配列が与えられます。 。目標は、その配列から 5 つの数字の可能な組み合わせをすべて見つけることです。各組み合わせは一意でなければなりません。つまり、重複は許可されません。たとえば、(1,2,3,4,5) と (5,4,3,2,1) は同じ組み合わせとみなされます。
Solution
考えられる解決策の 1 つは、Combinations クラスを使用することです。これは、Iterator インターフェイスを実装し、指定された数値のすべての可能な組み合わせを反復処理する方法を提供します。その仕組みは次のとおりです:
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, ' ';
このコードは次の出力を生成します:
12345 12346 12347 12356 12357 12367 12456 12457 12467 12567 13456 13457 13467 13567 14567 23456 23457 23467 23567 24567 34567
以上がPHP を使用して、7 つの数値 (1、2、3、4、5、6、7) の配列から 5 つの数値の一意の組み合わせをすべて生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。