如何在PHP中找到任意数量的数组的每个可能组合

时间:2010-03-03 17:13:21

标签: php arrays multidimensional-array

我在php中有任意数量的嵌套数组。例如:

Array
(
    [0] => Array
        (
            [0] => 36
            [0] => 2
            [0] => 9
        )

    [1] => Array
        (
            [0] => 95
            [1] => 21
            [2] => 102
            [3] => 38
        )

    [2] => Array
        (
            [0] => 3
            [1] => 5
        )

)

我想找到最有效的方法来组合每个嵌套数组的所有可能组合。我想结束看起来像这样的东西......

Array
(
    [0] => "36,95,3"
    [1] => "36,95,5"
    [2] => "36,21,3"
    [3] => "36,21,5"

    etc...

)

结果的组合顺序并不重要。也就是说,“3,95,36”,“36,95,3”和“95,36,3”之间没有区别。我想省略这些多余的组合。

有关如何解决这个问题的任何建议都将非常感激。

提前致谢,

2 个答案:

答案 0 :(得分:1)

<?php
$a = array("01", "02");
$b = array("white", "green");
$c = array("one", "two", "three");
$aG = array($a, $b, $c);
$codes = array();
$pos = 0;
generateCodes($aG);

function generateCodes($arr) {
    global $codes, $pos;
    if(count($arr)) {
    for($i=0; $i<count($arr[0]); $i++) {
        $tmp = $arr;
        $codes[$pos] = $arr[0][$i];
        $tarr = array_shift($tmp);
        $pos++;
        generateCodes($tmp);

    }
    } else {
    echo join(", ", $codes)."<br/>";
    }
    $pos--;
}
?>

答案 1 :(得分:0)

任意数量的组的常规置换解决方案(在Groovy中保持简单)。

list = [["A", "B", "W"], ["C", "D"], ["X", "Y"]]

r = []
void p(List<List<String>> l, int n) {
    for(t in l[n]) {
        r[n] = t
        if (n < l.size() - 1) {
            p(l, n + 1)
        } else {
            println(r)
        }
    }
}

p(list, 0);