1

The code below will create an array for all possible combination that can occur when you have four different variables. The variables always need to equal 1. The for loops I have created work and I understand how to make this work for more variables, but can I make this dynamic? I need to have a function that has how many variables there are as a parameter. If there are three variables create the three forloops. If there are 10... create the 10 corresponding for loops to determine all possible combinations.

```
$anarray2 = array();
for( $a = 1; $a <= 97; $a++ ) {
for( $b = 1; $a + $b <=98 ; $b++ ) {
for( $c = 1; $a + $b + $c <= 99; $c++ ) {
$d = 100 - ( $a + $b + $c );
$var_1 = $a / 100;
$var_2 = $b / 100;
$var_3 = $c / 100;
$var_4 = $d / 100;
$anarray2[] = array( $var_1, $var_2, $var_3, $var_4 );
}
}
}
print_array( $anarray2 );
```

Can you provide me with a link to an example? I've never heard of this before.... time to google - Jason Biondo 2012-04-04 03:07

Start here: http://stackoverflow.com/search?q=%5Bphp%5D+cartesian+product+algorith - deceze 2012-04-04 03:14

I think you're probably right, but I'm not sure about the implementation. I'll keep looking.. - Jason Biondo 2012-04-04 04:41

0

You're effectively looking to share out `I`

identical items to `N`

people in all of the different possible ways.

If there is one person (`N==1`

), then there is only one way to do this - give that person all `I`

items.

If there is more than one person (`N>1`

), then we can consider how many items can be assigned to the first person, and then what the possible assignments are for the remaining `N-1`

people in each case.

This leads to a nice recursive solution. Firstly we solve the problem for `N=1`

:

```
function assign($I, $N) {
$anarray = array();
if ($N == 1) {
$anarray[] = array($I);
} else {
// Coming up...
}
return $anarray;
}
```

Now we solve the problem for `N=k`

(some constant) in terms of `N=k-1`

- that is, we solve the problem using the solution to a smaller problem. This will reach all the way back to the solution when `N=1`

.

```
function assign($I, $N) {
$anarray = array();
if ($N == 1) {
$anarray[] = array($I);
} else {
for ($i = $I; $i < $I; $i++) {
foreach (assign($I - $i, $N - 1) as $subproblem) {
$anarray[] = array_merge(array($i), $subproblem);
}
}
}
return $anarray;
}
```

Something like that should do the job.

cartesian productalgorithm? There are already many out there.. - deceze 2012-04-04 02:16