PHP: получить перестановки вложенного массива с рекурсией - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть структура вложенного массива ниже.

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

Моя цель - найти все возможные перестановки чисел, в то время как буквы должны сохранять порядок ABC.Ожидаемый результат:

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

Однако я хочу, чтобы это работало динамически, с различным числом массивов.Я уже подумал, что рекурсивный подход может сработать, но я не могу обернуться вокруг него.Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 13 февраля 2019

Просто передайте строку в рекурсии:

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

...