Deele - 4 months ago 6x
PHP Question

# Permutations - all possible sets of numbers

I have numbers, from 0 to 8. I would like in result, all possible sets of those numbers, each set should use all numbers, each number can occur only once in a set.

I would like to see solution made in PHP that could print out result. Or, at least, I would like some refreshment in theory of combinatorics, as I have long forgotten it. What is the formula to calculate how many permutations will there be?

Example sets:

• 0-1-2-3-4-5-6-7-8

• 0-1-2-3-4-5-6-8-7

• 0-1-2-3-4-5-8-6-7

• 0-1-2-3-4-8-5-6-7

• 0-1-2-3-8-4-5-6-7

• 0-1-2-8-3-4-5-6-7

• and so on...

You're looking for the permutations formula:

``````nPk = n!/(n-k)!
``````

In your case, you have 9 entries and you want to choose all of them, that's 9P9 = 9! = 362880

You can find a PHP algorithm to permutate in recipe 4.26 of O'Reilly's "PHP Cookbook".

``````pc_permute(array(0, 1, 2, 3, 4, 5, 7, 8));
``````

Copied in from O'Reilly:

``````function pc_permute(\$items, \$perms = array( )) {
if (empty(\$items)) {
print join(' ', \$perms) . "\n";
}  else {
for (\$i = count(\$items) - 1; \$i >= 0; --\$i) {
\$newitems = \$items;
\$newperms = \$perms;
list(\$foo) = array_splice(\$newitems, \$i, 1);
array_unshift(\$newperms, \$foo);
pc_permute(\$newitems, \$newperms);
}
}
}
``````
Source (Stackoverflow)