Декартово произведение на неизвестное количество массивов php

Мне нужно получить каждую уникальную комбинацию из нескольких отдельных массивов. Я не знаю, сколько массивов, так как это может варьироваться.

Поправьте меня, если я ошибаюсь, но я думаю, что я должен использовать Cartesian Product метод.


Это базовый план моих данных.

[
{
"department": "CIS",
"name": "Intro to CIS",
"sections": {
"01": {
"regNum": "012345",
"days": "MWF",
"startTime": "900",
"endTime": "1030",
"labDay": "M",
"labStartTime": "1300",
"labEndTime": "1500"},
"02": {
"regNum": "098304",
"days": "TR",
"startTime": "1300",
"endTime": "1500",
"labDay": "",
"labStartTime": "",
"labEndTime": ""}
}
},
{
"department": "MATH",
"name": "Intro to MATH",
"sections": {
"01": {
"regNum": "012345",
"days": "MWF",
"startTime": "900",
"endTime": "1030",
"labDay": "M",
"labStartTime": "1300",
"labEndTime": "1500"},
"02": {
"regNum": "098304",
"days": "TR",
"startTime": "1300",
"endTime": "1500",
"labDay": "",
"labStartTime": "",
"labEndTime": ""}
}
}
]

Желаемый результат:

[[[CIS 01 Array],[MATH 01 Array]],
[[CIS 01 Array],[MATH 02 Array]],
[[CIS 02 Array],[MATH 01 Array]],
[[CIS 02 Array],[MATH 02 Array]]
]

Обратите внимание, что это массивы, так как мне все еще нужно иметь доступ к дням, startTime .. и т. Д.

0

Решение

Вы делаете не декартово произведение всех отделов, а произведение каждого отдела и его отделов. Вам просто нужно 2 вложенных цикла, один для отделов и другой для разделов в отделе. Затем вы можете добавить название отдела и номер раздела в ассоциативный массив и вставить его в результат.

$departments = json_decode($json_string, true);
$result = array();
foreach ($departments as $dept) {
$name = $dept['department'];
foreach ($dept['sections'] as $sectno => $secdata) {
$secdata['dept'] = $name;
$secdata['section'] = $sectno;
$result[] = $secdata;
}
}

DEMO

0

Другие решения

Других решений пока нет …