NVG - 1 year ago 135
PHP Question

# PHP array combinations

I have an array of 7 numbers (1,2,3,4,5,6,7) and I want to make pairs of 5 numbers like (1,2,3,4,5),(1,2,3,4,6,),(1,2,3,4,7) .
(1,2,3,4,5) is equal to (4,5,3,1,2)

I would like to know if there is a function in PHP or any algorithm that can do this ?
I have no idea where to start from.
Can you help me ?

I want all the combinations of 7 given numbers ( they are taken from an array ) put into 5 slots,disregarding order

You can use the solution found here http://stereofrog.com/blok/on/070910.

Incase the link goes down here's the code....

``````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, ' ';
``````

12345 12346 12347 12356 12357 12367 12456 12457 12467 12567 13456 13457 13467 13567 14567 23456 23457 23467 23567 24567 34567

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download