【问题标题】:Cartesian Product on unknown number of php arrays未知数量的 php 数组上的笛卡尔积
【发布时间】:2017-06-12 16:59:47
【问题描述】:

我需要从多个单独的数组中获取每个独特的组合。我不知道有多少数组,因为这可能会有所不同。

如果我错了,请纠正我,但我认为我应该使用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 ..etc

【问题讨论】:

  • SO 不是免费的编码服务。您必须自己尝试解决问题。如果您无法使其正常工作,请发布您尝试过的内容,我们会帮助您解决问题。
  • 我已经考虑了一段时间了,不知道如何实现。
  • 你需要使用嵌套循环。
  • 你也可以使用递归。编写代码以获得仅 2 个数组的叉积。如果您有超过 2 个数组,请获取前 2 个数组的叉积,然后使用该结果和其余数组进行递归。
  • @Barmar 请看我的编辑

标签: php cartesian-product


【解决方案1】:

您不是在做所有部门的笛卡尔积,而只是每个部门及其部分的积。您只需要 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

【讨论】:

  • foreach ($dept['sections'] as $sectno => $secdata) 出现错误
  • 你要让我猜测错误是什么?用纯文本替换 JSON 的图像怎么样,以便我可以将其粘贴到我的代码中并进行测试?
  • 好的,会的。这只是一个解析错误。我认为这与分配关联标识符有关
  • 嗯,那个时候工作。非常感谢您的帮助!
  • 很抱歉再次打扰您,但输出不太正确。它目前打印出所有可能的部分,但我需要的是以下内容:[[0] => [[CIS 01 Data],[MATH 01 DATA]], [1] => [[CIS 01 Data],[MATH 02 DATA]], [2] => [[CIS 02 Data],[MATH 01 DATA]], [3] => [[CIS 02 Data],[MATH 02 DATA]]] 当然是伪代码
猜你喜欢
  • 2017-03-05
  • 2011-12-18
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-10
相关资源
最近更新 更多