获取多维数组的组合

时间:2016-03-08 12:44:58

标签: php arrays recursion multidimensional-array combinations

让我们考虑以下数组:

$dataArray = array(
    'A' => array(
            'A1',
            'A2',
        ),
    'B' => array(
            'B1',
            'B2',
            'B3',
        ),
    'C' => array(
            'C1',
            'C2',
            'C3',
        )
);

我可以按照获得以下输出的最快和最佳性能循环:

A1 B1 C1
A1 B1 C2
A1 B1 C3

A1 B2 C1
A1 B2 C2
A1 B2 C3

A1 B3 C1
A1 B3 C2
A1 B3 C3

A2 B1 C1
A2 B1 C2
A2 B1 C3

....

An Bn Cn

请注意,子阵列的数量是动态的,长度相同。

一旦我按照给定的输出到达每一行,我将需要在迭代内部进行处理。

这是我到现在为止所尝试的,但它并没有在循环开始时给出正确的结果:

foreach($dataArray as $k => $vals1){
    foreach($vals1 as $k1 => $val1){
        $currentVars[$k] = $val1;
        foreach($dataArray as $k2 => $vals2){
            foreach($vals2 as $val2){
                if($k == $k2) break;
                $currentVars[$k2] = $val2;
                echo implode(" ", $currentVars).chr(10);
            }
            unset($dataArray[$k]);
        }
    }
}

输出:

A1 B1
A1 B2
A1 B3
A1 B3 C1
A1 B3 C2
A1 B3 C3
A2 B1 C3
A2 B2 C3
A2 B3 C3
A2 B3 C1
A2 B3 C2
A2 B3 C3
A2 B1 C1
A2 B1 C2
A2 B1 C3
A2 B2 C1
A2 B2 C2
A2 B2 C3
A2 B3 C1
A2 B3 C2
A2 B3 C3

0 个答案:

没有答案