【问题标题】:PHP: get permutations of nested array with recursionPHP:使用递归获取嵌套数组的排列
【发布时间】:2019-07-07 08:04:46
【问题描述】:

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

$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>';
        }
    }
}

但是,我希望它能够动态地工作,具有不同数量的数组。我已经认为递归方法可以工作,但我无法绕过它。有人可以帮忙吗?

【问题讨论】:

  • 您的 $letters 数组看起来很奇怪。 $letters = array(array(1, 2), array(3, 4), array(5, 6)); 还不够吗?

标签: php arrays recursion permutation


【解决方案1】:

只需将字符串传递到递归中:

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

【讨论】:

    猜你喜欢
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2021-10-31
    • 2010-12-18
    • 2018-09-12
    相关资源
    最近更新 更多