@Gemorroj

Сопоставление матриц?

Необходимо из данных в переменной $data получить все возможные варианты, как указано в переменной $expected
$data = [
    [
        'rates' => [1, 2],
        'origin' => 1,
    ],
    [
        'rates' => [3, 4],
        'origin' => 2,
    ],
    [
        'rates' => [5],
        'origin' => 3,
    ],
];
// нужно получить все возможные комбинации, как показано ниже
 
 
$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,
        ],
    ],
];
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ответы на вопрос 3
@ravewave
посмотрите алгоритм декартова произведения множеств
Ответ написан
Комментировать
wataru
@wataru Куратор тега Алгоритмы
Разработчик на С++, экс-олимпиадник.
Рекурсивной функцией делайте. Передавайте ей уже собранную строку и сколько элементов списка rates обработано. В функции перебирайте каждый элемент внутреннего rates дописывайте к уже собранной строке один элемент и рекурсивно запускайтесь дальше. Если все элементы обработаны, добавляйте собранную строку в ответ.
Ответ написан
@Gemorroj Автор вопроса
решение от коллеги
https://3v4l.org/viVlL
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы