<?php
$data = [
[
'rates' => [1, 2],
'origin' => 1,
],
[
'rates' => [3, 4],
'origin' => 2,
],
[
'rates' => [5],
'origin' => 3,
],
];
$result = [];
foreach ($data[0]['rates'] as $rate) {
$tmp = [
'rate' => $rate,
'origin' => $data[0]['origin'],
];
rates($tmp, [$data[1], $data[2]]);
}
function rates(array $baseRate, array $nextData): void
{
global $result;
for ($i = 0; $i < count($nextData); ++$i) {
foreach ($nextData[$i]['rates'] as $rate) {
$tmp = [];
$tmp[] = $baseRate;
$tmp[] = [
'rate' => $rate,
'origin' => $nextData[$i]['origin'],
];
for ($j = 0; $j < count($nextData); ++$j) {
if ($i === $j) {
continue;
}
foreach ($nextData[$j]['rates'] as $subRate) {
$tmp[] = [
'rate' => $subRate,
'origin' => $nextData[$j]['origin'],
];
}
}
$result[] = $tmp;
}
}
}
\print_r($result);
$expected = [
[
[
'rate' => 1,
'origin' => 1,
],
[
'rate' => 3,
'origin' => 2,
],
[
'rate' => 5,
'origin' => 3,
],
],
[
[
'rate' => 1,
'origin' => 1,
],
[
'rate' => 4,
'origin' => 2,
],
[
'rate' => 5,
'origin' => 3,
],
],
[
[
'rate' => 2,
'origin' => 1,
],
[
'rate' => 3,
'origin' => 2,
],
[
'rate' => 5,
'origin' => 3,
],
],
[
[
'rate' => 2,
'origin' => 1,
],
[
'rate' => 4,
'origin' => 2,
],
[
'rate' => 5,
'origin' => 3,
],
],
];
preferences:
85.12 ms | 402 KiB | 5 Q