-1
$num = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

In array $num there are 10 numbers. I want to list all possible 3-number-combinations with PHP. Just like:

1, 2, 3
1, 2, 4
1, 2, 5
etc

Edit:
Thanks for all answers but there is a problem if I want to create 6-number-combinations.

$num_array2 = array(1, 2, 3, 4, 5, 6, 7, 8, 11, 12, 13, 15, 16, 18, 19, 20);

foreach($num_array2 AS $value1) {
    foreach($num_array2 AS $value2) {
        if($value2 == $value1) {
            continue;
        }
        foreach($num_array2 AS $value3) {
            if($value3 == $value1 || $value3 == $value2) {
                continue;
            }
            foreach($num_array2 AS $value4) {
                if($value4 == $value1 || $value4 == $value2 || $value4 == $value3) {
                    continue;
                }
                foreach($num_array2 AS $value5) {
                    if($value5 == $value1 || $value5 == $value2 || $value5 == $value3 || $value5 == $value4) {
                        continue;
                    }
                    foreach($num_array2 AS $value6) {
                        if($value6 == $value1 || $value6 == $value2 || $value6 == $value3 || $value6 == $value4 || $value6 == $value5) {
                            continue;
                        }
                        echo "$value1, $value2, $value3, $value4, $value5, $value6 \n<br />";
                    }
                }
            }
        }
    }
}

I just can't list

1, 2, 3, 4, 5, 6
1, 2, 3, 4, 5, 7
etc.

Did I do something wrong?

AkiEru
  • 780
  • 1
  • 9
  • 34
  • so you would expect 10^10 (1000) possible numbers? – Endless Nov 10 '13 at 16:54
  • @Endless it's actually `10 * 8 * 9 = 720` possible values, given no two digits appear twice in one result :) – frnhr Nov 10 '13 at 16:58
  • Guess i'm quite bad at Math then :P – Endless Nov 10 '13 at 16:59
  • Take a look here for another way of tackling your issue: http://stackoverflow.com/questions/1256117/algorithm-that-will-take-numbers-or-words-and-find-all-possible-combinations – tommyd456 Nov 10 '13 at 17:22
  • Actually the number of combinations, in the mathematical sense, so without listing both 1,2,3 and 3,2,1, is only 10!/(3!(10-3)!) = 120. – Borre Mosch Nov 10 '13 at 17:28

2 Answers2

1

Try this:

foreach($num AS $value1)
{
  foreach($num AS $value2)
  {
    if($value2 == $value1){
      continue;
    }
    foreach($num AS $value3)
    {
      if($value3 == $value1 || $value3 == $value2){
        continue;
      }
      echo "$value1, $value2, $value3<br/>";
    }
  }
}

EDIT:

Actually, the previous code lists all permutations rather than combinations. If you want all combinations, try this:

for($value1 = 1; $value1 <= 10; $value1++){
  for($value2 = $value1 + 1; $value2 <= 10; $value2++){
    for($value3 = $value2 + 1; $value3 <= 10; $value3++){
      echo "$value1, $value2, $value3<br/>";
    }
  }
}
Borre Mosch
  • 4,404
  • 2
  • 19
  • 28
0

Something on the lines of ...

foreach($num AS $value1)
{
  foreach($num AS $value2)
  {
    foreach($num AS $value3)
    {
      echo $value1 . ',' . $value2 . ',' . $value3 . '<br>';
    }
  }
}
tommyd456
  • 10,443
  • 26
  • 89
  • 163