代码之家  ›  专栏  ›  技术社区  ›  Viacheslav Ravdin

按公共值组合多维数组列

  •  -1
  • Viacheslav Ravdin  · 技术社区  · 2 年前

    我有以下数组,它表示一个工作时间表:

        Array
        (
            ...,
            [1] => Array
                (
                    [TIME] => Array
                        (
                            [0] => Array
                                (
                                    [FROM] => 10:00
                                    [TO] => 20:00
                                )
                        )
                    [DAYS] => Array
                        (
                            [0] => 5
                        )
                )
            [2] => Array
                (
                    [TIME] => Array
                        (
                            [0] => Array
                                (
                                    [FROM] => 22:00
                                    [TO] => 00:00
                                )
                        )
                    [DAYS] => Array
                        (
                            [0] => 5
                        )
                )
        )
    

    如果 DAYS 键是常见的,因此结果如下所示:

        Array
        (
            ...,
            [1] => Array
                (
                    [TIME] => Array
                        (
                            [0] => Array
                                (
                                    [FROM] => 10:00
                                    [TO] => 20:00
                                )
                            [1] => Array
                                (
                                    [FROM] => 22:00
                                    [TO] => 00:00
                                )
                        )
                    [DAYS] => Array
                        (
                            [0] => 5
                        )
                )
        )
    

    我曾经尝试过 array_merge() array_combine() 功能,但它们并没有像我认为的那样工作。

    将感谢任何帮助!

    1 回复  |  直到 2 年前
        1
  •  1
  •   Adi    2 年前

    所以我在给定的输入和输出中尝试了一些东西,假设Days只有一个值,对吗?

    $schedules = 
    [
        [
            'TIME' => 
                [
                    [
                        "FROM" => "10:00",
                        "TO" => "20:00"
                    ]
                ],
            'DAYS' => [5]
        ],
        [
            'TIME' => 
                [
                    [
                        "FROM" => "22:00",
                        "TO" => "00:00"
                    ]
                ],
            'DAYS' => [5]
        ]
    ];
    $hashmap = [];
    foreach ($schedules as $schedule) {
        $days = $schedule['DAYS'][0];
        if (!isset($hashmap[$days])) {
            $hashmap[$days] = $schedule;
        } else {
            $hashmap[$days]['TIME'] = array_merge($hashmap[$days]['TIME'], $schedule['TIME']);
        }
    }
    $hashmap = array_values($hashmap);
    

    希望这能有所帮助