PHP:使用递归获取嵌套数组的排列

问题描述 投票:1回答:1

我有下面的嵌套数组结构。

$letters = array(
    $A = array(1,2),
    $B = array(3,4),
    $C = array(5,6)
);

我的目标是找到所有可能的数字排列,而字母必须保持A-B-C的顺序。预期的产出是:

1-3-5
1-3-6
1-4-5
1-4-6
2-3-5
2-3-6
2-4-5
2-4-6

当然,这可以通过foreach轻松完成:

foreach($A as $a){
    foreach($B as $b){
        foreach($C as $c){
            echo $a.$b.$c.'<br>';
        }
    }
}

但是,我想让它以不同数量的数组动态工作。我已经认为递归方法可以起作用,但我无法绕过它。有人可以帮忙吗?

php arrays recursion permutation
1个回答
3
投票

只需将字符串传递给递归:

function work($str, $arr, $i)
{
    $last = ($i == count($arr) - 1);
    foreach ($arr[$i] as $c)
    {
        if ($last)
            echo $str . $c . "\n"; // print whole line
        else
            work($str . $c, $arr, $i + 1); // recurse to next column
    }
}

$letters = array(
    array(1,2),
    array(3,4),
    array(5,6)
);

work("", $letters, 0);

产生

135 136 145 146 235 236 245 246

© www.soinside.com 2019 - 2024. All rights reserved.