首页 >后端开发 >php教程 >如何在 PHP 中从 7 位数数组生成 5 位数的所有可能组合?

如何在 PHP 中从 7 位数数组生成 5 位数的所有可能组合?

Barbara Streisand
Barbara Streisand原创
2024-12-09 08:00:18969浏览

How to Generate All Possible Combinations of 5 Numbers from a 7-Number Array in PHP?

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 &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;
    }
}


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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn