PHP 陣列組合
本題尋求一種有效的方法,從7 個數字的陣列中產生5 個數字的所有可能組合,忽略它們的值order。
這裡找到的程式碼提供了一個解決方案:http://stereofrog.com/blok/on/070910。下面是供您參考的程式碼:
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, ' ';
此程式碼定義了一個 Iterator 類,它從提供的字串或陣列產生給定大小的組合。問題 ("1234567", 5) 中給出的範例的輸出將是:
12345 12346 12347 12356 12357 12367 12456 12457 12467 12567 13456 13457 13467 13567 14567 23456 23457 23467 23567 24567 34567
以上是如何在 PHP 中從 7 位數數組產生 5 位數的所有可能組合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!