2012-04-05 78 views
1
的3个阵列

可能重复:
PHP take all combinationsPHP可能的组合2倍的值

我想在做PHP的东西,会告诉我车牌的所有组合的。 例如:

你有3个箱子,你可以在最多填写2个值

BOX1 BOX2 BOX3 
75 PM M5 
7S PH MS 
Z5 PN H5 
ZS RM HS 
25 RH N5 
2S RN NS 

NOT BOX1+BOX1+BOX1 
It needs to show me 
ex. 75-PM-M5 
ex. 75-PH-MS 
ex. 75-PN-MS 
ex. 75-PM-H5 
ex. 75-PH-H5 
ex. 75-PN-H5 
So, BOX1+BOX2+BOX3 

The PHP script needs to calculate all the combinations for BOX1+BOX2+BOX3 
So BOX1 value1 and value2 are ONE value not two separate values. 
In BOX2 value1 and value2 are also ONE value not two separate values and so on. 

If I want all combinations of 
BOX1'91' + BOX2'HF' + BOX3'PF' 
BOX1'74' + BOX2'RT' + BOX3'YT' 

It will calculate an amount of 2x2x2=8 combinations 

ex. 91-HF-PF 
ex. 91-HF-YT 
ex. 91-RT-PF 
ex. 91-RT-YT 
ex. 74-HF-PF 
ex. 74-HF-YT 
ex. 74-RT-PF 
ex. 74-RT-YT 

例的pin码

您需要输入4个pincodes使用你的APM卡

PIN1+PIN2+PIN3+PIN4 
1 1 1 1 
2 2 2 2 
3 3 3 3 
4 4 4 4 
5 5 5 5 
6 6 6 6 
7 7 7 7 
8 8 8 8 
9 9 9 9 
0 0 0 0 

因此,你总共有10x1 0x10x10 = 10.000组合,它有显示所有组合

,如果有人可以帮助我,我会很感激

+0

检查我在这个主题的答案:http://stackoverflow.com/questions/9787051/php-take-all-combinations/9787438#9787438。它也应该适合你。 – 2012-04-05 13:28:57

+0

这看起来像我需要的,但它也显示猫猫猫。但那不是我想要的。它只需要显示box1box2box3而不是box1box1box1的组合..任何想法? – MOTIVECODEX 2012-04-06 22:59:48

+0

SO:没有元素可以重复(例如NO A-A-B,C-C-C等)并且A-B-C被认为不同于A-C-B。我的假设是否正确? – 2012-04-06 23:11:43

回答

4

代码:

<?php 

function combinations($arr, $n) 
{ 
    $res = array(); 

    foreach ($arr[$n] as $item) 
    { 
     if ($n==count($arr)-1) 
      $res[]=$item; 
     else 
     { 
      $combs = combinations($arr,$n+1); 

      foreach ($combs as $comb) 
      { 
       $res[] = "$item $comb"; 
      } 
     } 
    } 
    return $res; 
} 

// Your ARRAY (first array is like 'BOX1', etc -) 
// you can put as many items in each 'BOX' as you like... 
// and as many 'boxes' as you like 
$words = array(array('A','B'),array('C','D'), array('E','F')); 

$combos = combinations($words,0); // ALWAYS, call it with 0 as the last parameter 
print_r($combos); 

?> 

输出:

Array 
(
    [0] => A C E 
    [1] => A C F 
    [2] => A D E 
    [3] => A D F 
    [4] => B C E 
    [5] => B C F 
    [6] => B D E 
    [7] => B D F 
) 

I认为这完全是你需要的...... :-)

+1

这正是我需要的! +1 – user1105056 2013-04-12 14:02:25