【发布时间】:2017-06-13 09:58:00
【问题描述】:
我正在尝试获取未知数量数组的所有可能组合:
这是 JSON 数据结构
[
{
"department": "CIS",
"name": "Intro to CIS",
"sections": [
{
"sectionNumber": "01",
"regNum": "012345",
"days": "MWF",
"startTime": "900",
"endTime": "1030",
"labDay": "M",
"labStartTime": "1300",
"labEndTime": "1500"
},
{
"sectionNumber": "02",
"regNum": "098304",
"days": "TR",
"startTime": "1300",
"endTime": "1500",
"labDay": "",
"labStartTime": "",
"labEndTime": ""
}
]
},
{
"department": "MATH",
"name": "Intro to MATH",
"sections": [
{
"sectionNumber": "01",
"regNum": "012345",
"days": "MWF",
"startTime": "900",
"endTime": "1030",
"labDay": "M",
"labStartTime": "1300",
"labEndTime": "1500"
},
{
"sectionNumber": "02",
"regNum": "098304",
"days": "TR",
"startTime": "1300",
"endTime": "1500",
"labDay": "",
"labStartTime": "",
"labEndTime": ""
}
]
}
]
我希望结果如下:结果应该包含整个课程关联数组,以便我可以访问其所有数据(sectionNumber、regNum、days、..etc)
注意,我不知道会有多少课程或部分。此外,一门课程永远不应该与自己比较。
期望的结果:
[
[ [CIS 01 Array],[MATH 01 Array] ],
[ [CIS 01 Array],[MATH 02 Array] ],
[ [CIS 02 Array],[MATH 01 Array] ],
[ [CIS 02 Array],[MATH 02 Array]]
]
每个结果数组都应包含数组(长度与课程数相同)。
我认为我应该使用笛卡尔积,但我不完全确定如何实现它。 我开始做这样的事情,但我知道这是不正确的:
for($i = 0; $i < count($json_data); $i++){ //courses
for($k = 0; $k < count($json_data[$i]["sections"]); $k++){ //first sections
for($p = 1; $p < count($json_data[$i]["sections"]); $p++){ //all other courses but 1
for($h = 0; $h < count($json_data[$i]["sections"][$p]); $h++){
echo $json_data[$i]["sections"][$k]["labDay"];
}
}
}
}
【问题讨论】:
-
根据您的内存限制,您可以使用递归函数将包括自身在内的所有剩余元素添加到结果数组中。
-
@ChrisThorsvik 但是应该是包含数组的结果数组。此外,一门课程永远不应该与自己进行比较。
-
你能澄清一件事吗?你说“每个结果数组都应该包含数组......长度与课程数量相同”。您的意思是结果数组中的每个元素都应该包含每个部门的一门课程吗?
-
@christhorsvik 你的解决方案很完美
标签: php cartesian-product