<?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,
],
],
];
- Output for 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
- Array
(
[0] => Array
(
[0] => Array
(
[rate] => 1
[origin] => 1
)
[1] => Array
(
[rate] => 3
[origin] => 2
)
[2] => Array
(
[rate] => 5
[origin] => 3
)
)
[1] => Array
(
[0] => Array
(
[rate] => 1
[origin] => 1
)
[1] => Array
(
[rate] => 4
[origin] => 2
)
[2] => Array
(
[rate] => 5
[origin] => 3
)
)
[2] => Array
(
[0] => Array
(
[rate] => 1
[origin] => 1
)
[1] => Array
(
[rate] => 5
[origin] => 3
)
[2] => Array
(
[rate] => 3
[origin] => 2
)
[3] => Array
(
[rate] => 4
[origin] => 2
)
)
[3] => Array
(
[0] => Array
(
[rate] => 2
[origin] => 1
)
[1] => Array
(
[rate] => 3
[origin] => 2
)
[2] => Array
(
[rate] => 5
[origin] => 3
)
)
[4] => Array
(
[0] => Array
(
[rate] => 2
[origin] => 1
)
[1] => Array
(
[rate] => 4
[origin] => 2
)
[2] => Array
(
[rate] => 5
[origin] => 3
)
)
[5] => Array
(
[0] => Array
(
[rate] => 2
[origin] => 1
)
[1] => Array
(
[rate] => 5
[origin] => 3
)
[2] => Array
(
[rate] => 3
[origin] => 2
)
[3] => Array
(
[rate] => 4
[origin] => 2
)
)
)
preferences:
143.78 ms | 418 KiB | 5 Q