排列关联数组中的数据

我有一个相关的结果数组。我需要根据它们的类别对数组进行分组。例如:与类别相关的作业将在单次迭代下合并。


用于制作的代码:


    $result = array();

    foreach ($group as $element) {

        $result[$element['category']][] = $element;

    }

[Professional Services / Consulting / Project Mgmt] => Array

        (

            [0] => Array

                (

                    [category] => Professional Services / Consulting / Project Mgmt

                    [jobs] => Array

                        (

                            [0] => stdClass Object

                                (

                                    [date] => 12/11/2019

                                    [country] => IND

                                )

                        )

                )

            [1] => Array

                (

                    [category] => Professional Services / Consulting / Project Mgmt

                    [jobs] => Array

                        (

                            [0] => stdClass Object

                                (

                                    [date] => 02/11/2019

                                    [country] => US

                                )

                            [1] => stdClass Object

                                (

                                    [date] => 03/11/2019

                                    [country] => SS

                                )

                        )

                )

      )

但我需要如下数据:


[Professional Services / Consulting / Project Mgmt] => Array

        (

            [0] => Array

                (

                    [category] => Professional Services / Consulting / Project Mgmt

                    [jobs] => Array

                        (

                            [0] => stdClass Object

                                (

                                    [date] => 12/11/2019

                                    [country] => IND

                                )

                        )

                )

      )

请帮我解决一下这个。


天涯尽头无女友
浏览 95回答 1
1回答

小怪兽爱吃肉

这样$result[$element['category']][] = $element;,您只需将具有相同类别的每个元素附加到数组中。相反,您想要的是合并它们。因此,在构建时$result您需要处理两种情况:如果$result-array 不包含您调用的类别$result[$element['category']] = $element;。如果它已经包含您将$element['jobs']-array附加到的类别$result[$element['category']]['jobs']。看看array_key_exists(这里)和array_merge(这里)。您可以将它们用于您的情况:$result = array();foreach ($group as $element) {    if(array_key_exists($element['category'], $result)) {        $result[$element['category']]['jobs'] = array_merge($result[$element['category']]['jobs'], $element['jobs']);    }    else {        $result[$element['category']] = $element;    }}注意:这不会导致您在问题中指定的确切结构。在您的问题中,您指定$result应该是一个数组,其中包含每个类别的数字索引(即$result[0]等等)。在我的解决方案中,您有字母数字键,即$result['Professional Services / Consulting / Project Mgmt']. 但我认为后者才是你真正想要的。
打开App,查看更多内容
随时随地看视频慕课网APP