0

I'm looking to write a function which creates all permutation of a list of arrays (The list is dynamical). Now I found 2 articles, http://dannyherran.com/2011/06/finding-unique-array-combinations-with-php-permutations/ and Finding cartesian product with PHP associative arrays. But I don't want to store them as multiple arrays, I want to add each array to each possibility so I can use them later.

In fact I want to multiply each array with the other.

For example:

$array = array(
    array(
        1,
        2
        ),
    array(
        'A',
        'B',
        'C'),
    array(
        'I',
        'II')
    );

In this form:

Array
(
[0] => Array
    (
        [0] => 1
        [1] => Array
            (
                [0] => Array
                    (
                        [0] => A
                        [1] => Array
                            (
                                [0] => I
                                [1] => II
                            )
                    )
                [1] => Array
                    (
                        [0] => B
                        [1] => Array
                            (
                                [0] => I
                                [1] => II
                            )
                    )
                [2] => Array
                    (
                        [0] => C
                        [1] => Array
                            (
                                [0] => I
                                [1] => II
                            )
                    )
            )
    )
[1] => Array
    (
        [0] => 2
        [1] => Array
            (
                [0] => Array
                    (
                        [0] => A
                        [1] => Array
                            (
                                [0] => I
                                [1] => II
                            )
                    )
                [1] => Array
                    (
                        [0] => B
                        [1] => Array
                            (
                                [0] => I
                                [1] => II
                            )
                    )
                [2] => Array
                    (
                        [0] => C
                        [1] => Array
                            (
                                [0] => I
                                [1] => II
                            )
                    )
            )
    )
)

I think this big example made my problem clear. For this type of array I created a function: foreach ($array[1] as $value) { $return1[] = array($value, $array[2]); }

foreach ($array[0] as $value) {
    $return[] = array($value, $return1);
}

print_r($return);

Now I want to create this function inside a recursive function (so it becomes dynamical) but I got stuck. I wanted to pass the amount of arrays to the function and then iterate.

function createTree($array, $loops=3){

$b = $array[$loops-2];

foreach ($b as $v) {
    $return[] = array($v, createTree($return, $loops-1));
}
print_r($return);
}

Maybe there is a total other solution to multiply the arrays? But the function which isn't recursive is easy for me, but making it recursive...

Thanks for your help

Community
  • 1
  • 1
user3278918
  • 45
  • 1
  • 7
  • The none recursive function I use is: `foreach ($array[1] as $value) { $return1[] = array($value, $array[2]); } foreach ($array[0] as $value) { $return[] = array($value, $return1); } print_r($return);` – user3278918 Feb 23 '15 at 21:38

1 Answers1

0
function createTree($array){
    switch(count($array)) {
    case 0:
        die('Illegal argument.');
    case 1:
        return $array[0];
    default:
        $lastArray = array_pop($array);

        $subArray = createTree($array);

        foreach ($lastArray as $item) {
            $return[] = array($item, $subArray);
        }

        return $return;
    }
}

var_dump(createTree(array_reverse($array)));
fjf2002
  • 872
  • 5
  • 15