Перевод 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);