Перевод c js на php. В чем проблема?

Есть вот такой js код. Для комбиниирования элементов массива. Так вот мне этот код нужно выполнить в php. Нашел код на js и не могу нормальн перевести в php.

function combinator(matrix){
        return matrix.reduceRight(function(combination, x){
            var result = [];
            x.forEach(function(a){
                combination.forEach(function(b){
                    result.push( [ a ].concat( b ) );
                });
            });

            return result;
        });
    };

    (function(){
        let params = {
            '1': ['Однокомнатная', 'Двухкомнатная', 'Трехкомнатная'],
            '2': ['Новостройка', 'Вторичка', 'Сталинка'],
            '3': ['50m2', '55m2', '60m2'],
            '4': ['Под ключ', 'Капитальный', 'Косметический'],
        };

        let keys = Object.keys(params);
        
        for (let i=0; i < keys.length; i++) {
            let n_arr = [];
            for (let x=0; x < i+1; x++) {
                let arr = params[keys[x]];
                n_arr.push(arr);
            }
            console.log(
              combinator(n_arr).join("\n")
            );
        }

    })()

Перевел в php.

function reduce_right($collection, callable $callback, $initial = null){

        $data = [];
        foreach ($collection as $index => $value) {
            $data[] = [$index, $value];
        }

        while ((list($index, $value) = \array_pop($data))) {
            $initial = $callback($value, $index, $collection, $initial);
        }

        return $initial;
    }

    function combinator($data){
        return reduce_right($data, function($combination, $item){
            $result = [];

            foreach ($item as $i) {
               var_dump($combination);
               foreach ($combination as $j) {
                   array_push($result,  array_merge([$i], $j) );
               }
            }

            return $result;
        });
    }

    $params = [
        '1' => ['Однокомнатная', 'Двухкомнатная', 'Трехкомнатная'],
        '2' => ['Новостройка', 'Вторичка', 'Сталинка'],
        '3' => ['50m2', '55m2', '60m2'],
        '4' => ['Под ключ', 'Капитальный', 'Косметический'],
    ];

    for($i = 0; $i < count($params); $i++) {
        $var = [];
        $key = array_keys($params);

        for($x = 0; $x < ($i+1); $x++ ){
            $arr = $params[$key[$x]];
            array_push($var, $arr);
        }

        print_r(combinator($var));
        echo '<br>';
    }

Помогите криворукому дяде перевести код)


Ответы (1 шт):

Автор решения: Ordman
$params = [
            ['Однокомнатная', 'Двухкомнатная', 'Трехкомнатная'],
            ['Новостройка', 'Вторичка', 'Сталинка'],
            ['50m2', '55m2', '60m2'],
            ['Под ключ', 'Капитальный', 'Косметический'],
        ];

function combine($left, $right){
    $final = [];
    foreach($left as $v){
        foreach($right as $vv){
            $final[] = "{$v},{$vv}";     
        }
    }

    return $final;
}

$r = array_reduce($params, function($acc, $item) {
    return $acc ? combine($acc, $item) : $item;
}, []);

var_dump($r);

Code

→ Ссылка