简体   繁体   English

我们可以在 PHP 中进行这种类型的数组合并吗? 如果可以,怎么做?

[英]Can we Do this type of array merge in PHP? If can, how?

There are so many array functions out there, i tried couple of them even tried doing couple of looping.. i can't do it.那里有很多数组函数,我尝试了其中的几个甚至尝试做几个循环......我做不到。 The given below array is my result array, same users are inserted multiple times because their values are different.下面给出的数组是我的结果数组,相同的用户被多次插入,因为它们的值不同。 Changing all the mechanism would be good idea, but iam at the last phase of the project.改变所有机制是个好主意,但我在项目的最后阶段。 If anyone could do this, please reply:如果有人可以做到这一点,请回复:

Array
(
[0] => stdClass Object
      (
        [user_id] => 321
        [name] => Paige Lycettok
        [id] => 4
        [openhouse_id] => 58e826747919f36c7cd0074d92af04c5
        [property_id] => 5
        [interested] => 1
        [openhouse] => Array
            (
                [0] => stdClass Object
                    (
                        [openhouse_id] => 6e291b19bdca9a4d074976f0e8b9bcff
                        [openhouse_date] => 2016-04-07
                        [start_time] => 08:00
                        [end_time] => 17:00
                    )

                [1] => stdClass Object
                    (
                        [openhouse_id] => ca1927cee99722ac7fbd1a0588fdc4de
                        [openhouse_date] => 2016-04-14
                        [start_time] => 07:00
                        [end_time] => 14:00
                    )

                [2] => stdClass Object
                    (
                        [openhouse_id] => 58e826747919f36c7cd0074d92af04c5
                        [openhouse_date] => 2016-04-21
                        [start_time] => 12:00
                        [end_time] => 18:00
                        [interested] => 1
                        [attendence] => 0
                    )

                [3] => stdClass Object
                    (
                        [openhouse_id] => 852e29abf3524a0b8ceea3ada823e44e
                        [openhouse_date] => 2016-04-21
                        [start_time] => 18:15
                        [end_time] => 21:15
                    )

                [4] => stdClass Object
                    (
                        [openhouse_id] => 1112019fed147e1de6f1308852009653
                        [openhouse_date] => 2016-04-25
                        [start_time] => 09:15
                        [end_time] => 11:15
                    )

                [5] => stdClass Object
                    (
                        [openhouse_id] => 03ab091ad03df06dfb6dcf2cb7ad211a
                        [openhouse_date] => 2016-04-28
                        [start_time] => 03:15
                        [end_time] => 09:15
                    )

            )

    )

[1] => stdClass Object
    (
        [user_id] => 320
        [name] => Mason Barker
        [id] => 5
        [openhouse_id] => 58e826747919f36c7cd0074d92af04c5
        [property_id] => 5
        [interested] => 1
        [openhouse] => Array
            (
                [0] => stdClass Object
                    (
                        [openhouse_id] => 6e291b19bdca9a4d074976f0e8b9bcff
                        [openhouse_date] => 2016-04-07
                        [start_time] => 08:00
                        [end_time] => 17:00
                    )

                [1] => stdClass Object
                    (
                        [openhouse_id] => ca1927cee99722ac7fbd1a0588fdc4de
                        [openhouse_date] => 2016-04-14
                        [start_time] => 07:00
                        [end_time] => 14:00
                    )

                [2] => stdClass Object
                    (
                        [openhouse_id] => 58e826747919f36c7cd0074d92af04c5
                        [openhouse_date] => 2016-04-21
                        [start_time] => 12:00
                        [end_time] => 18:00
                        [interested] => 1
                        [attendence] => 0
                    )

                [3] => stdClass Object
                    (
                        [openhouse_id] => 852e29abf3524a0b8ceea3ada823e44e
                        [openhouse_date] => 2016-04-21
                        [start_time] => 18:15
                        [end_time] => 21:15
                    )

                [4] => stdClass Object
                    (
                        [openhouse_id] => 1112019fed147e1de6f1308852009653
                        [openhouse_date] => 2016-04-25
                        [start_time] => 09:15
                        [end_time] => 11:15
                    )

                [5] => stdClass Object
                    (
                        [openhouse_id] => 03ab091ad03df06dfb6dcf2cb7ad211a
                        [openhouse_date] => 2016-04-28
                        [start_time] => 03:15
                        [end_time] => 09:15
                    )

            )

    )

[2] => stdClass Object
    (
        [user_id] => 323
        [name] => Jasmine Baudin
        [id] => 6
        [openhouse_id] => 03ab091ad03df06dfb6dcf2cb7ad211a
        [property_id] => 5
        [interested] => 1
        [openhouse] => Array
            (
                [0] => stdClass Object
                    (
                        [openhouse_id] => 6e291b19bdca9a4d074976f0e8b9bcff
                        [openhouse_date] => 2016-04-07
                        [start_time] => 08:00
                        [end_time] => 17:00
                    )

                [1] => stdClass Object
                    (
                        [openhouse_id] => ca1927cee99722ac7fbd1a0588fdc4de
                        [openhouse_date] => 2016-04-14
                        [start_time] => 07:00
                        [end_time] => 14:00
                    )

                [2] => stdClass Object
                    (
                        [openhouse_id] => 58e826747919f36c7cd0074d92af04c5
                        [openhouse_date] => 2016-04-21
                        [start_time] => 12:00
                        [end_time] => 18:00
                    )

                [3] => stdClass Object
                    (
                        [openhouse_id] => 852e29abf3524a0b8ceea3ada823e44e
                        [openhouse_date] => 2016-04-21
                        [start_time] => 18:15
                        [end_time] => 21:15
                    )

                [4] => stdClass Object
                    (
                        [openhouse_id] => 1112019fed147e1de6f1308852009653
                        [openhouse_date] => 2016-04-25
                        [start_time] => 09:15
                        [end_time] => 11:15
                    )

                [5] => stdClass Object
                    (
                        [openhouse_id] => 03ab091ad03df06dfb6dcf2cb7ad211a
                        [openhouse_date] => 2016-04-28
                        [start_time] => 03:15
                        [end_time] => 09:15
                        [interested] => 1
                        [attendence] => 0
                    )

            )

    )

[3] => stdClass Object
    (
        [user_id] => 323
        [name] => Jasmine Baudin
        [id] => 7
        [openhouse_id] => 852e29abf3524a0b8ceea3ada823e44e
        [property_id] => 5
        [interested] => 1
        [openhouse] => Array
            (
                [0] => stdClass Object
                    (
                        [openhouse_id] => 6e291b19bdca9a4d074976f0e8b9bcff
                        [openhouse_date] => 2016-04-07
                        [start_time] => 08:00
                        [end_time] => 17:00
                    )

                [1] => stdClass Object
                    (
                        [openhouse_id] => ca1927cee99722ac7fbd1a0588fdc4de
                        [openhouse_date] => 2016-04-14
                        [start_time] => 07:00
                        [end_time] => 14:00
                    )

                [2] => stdClass Object
                    (
                        [openhouse_id] => 58e826747919f36c7cd0074d92af04c5
                        [openhouse_date] => 2016-04-21
                        [start_time] => 12:00
                        [end_time] => 18:00
                    )

                [3] => stdClass Object
                    (
                        [openhouse_id] => 852e29abf3524a0b8ceea3ada823e44e
                        [openhouse_date] => 2016-04-21
                        [start_time] => 18:15
                        [end_time] => 21:15
                        [interested] => 1
                        [attendence] => 0
                    )

                [4] => stdClass Object
                    (
                        [openhouse_id] => 1112019fed147e1de6f1308852009653
                        [openhouse_date] => 2016-04-25
                        [start_time] => 09:15
                        [end_time] => 11:15
                    )

                [5] => stdClass Object
                    (
                        [openhouse_id] => 03ab091ad03df06dfb6dcf2cb7ad211a
                        [openhouse_date] => 2016-04-28
                        [start_time] => 03:15
                        [end_time] => 09:15
                    )

            )

    )

)

In the above array, i have the same user_id: 323. What i want is if the user_id are same i want to merge their openhouse array into one just like below:在上面的数组中,我有相同的 user_id: 323。我想要的是如果 user_id 相同,我想将他们的 openhouse 数组合并为一个,如下所示:

 Array
(
[0] => stdClass Object
      (
        [user_id] => 321
        [name] => Paige Lycettok
        [id] => 4
        [openhouse_id] => 58e826747919f36c7cd0074d92af04c5
        [property_id] => 5
        [interested] => 1
        [openhouse] => Array
            (
                [0] => stdClass Object
                    (
                        [openhouse_id] => 6e291b19bdca9a4d074976f0e8b9bcff
                        [openhouse_date] => 2016-04-07
                        [start_time] => 08:00
                        [end_time] => 17:00
                    )

                [1] => stdClass Object
                    (
                        [openhouse_id] => ca1927cee99722ac7fbd1a0588fdc4de
                        [openhouse_date] => 2016-04-14
                        [start_time] => 07:00
                        [end_time] => 14:00
                    )

                [2] => stdClass Object
                    (
                        [openhouse_id] => 58e826747919f36c7cd0074d92af04c5
                        [openhouse_date] => 2016-04-21
                        [start_time] => 12:00
                        [end_time] => 18:00
                        [interested] => 1
                        [attendence] => 0
                    )

                [3] => stdClass Object
                    (
                        [openhouse_id] => 852e29abf3524a0b8ceea3ada823e44e
                        [openhouse_date] => 2016-04-21
                        [start_time] => 18:15
                        [end_time] => 21:15
                    )

                [4] => stdClass Object
                    (
                        [openhouse_id] => 1112019fed147e1de6f1308852009653
                        [openhouse_date] => 2016-04-25
                        [start_time] => 09:15
                        [end_time] => 11:15
                    )

                [5] => stdClass Object
                    (
                        [openhouse_id] => 03ab091ad03df06dfb6dcf2cb7ad211a
                        [openhouse_date] => 2016-04-28
                        [start_time] => 03:15
                        [end_time] => 09:15
                    )

            )

    )

[1] => stdClass Object
    (
        [user_id] => 320
        [name] => Mason Barker
        [id] => 5
        [openhouse_id] => 58e826747919f36c7cd0074d92af04c5
        [property_id] => 5
        [interested] => 1
        [openhouse] => Array
            (
                [0] => stdClass Object
                    (
                        [openhouse_id] => 6e291b19bdca9a4d074976f0e8b9bcff
                        [openhouse_date] => 2016-04-07
                        [start_time] => 08:00
                        [end_time] => 17:00
                    )

                [1] => stdClass Object
                    (
                        [openhouse_id] => ca1927cee99722ac7fbd1a0588fdc4de
                        [openhouse_date] => 2016-04-14
                        [start_time] => 07:00
                        [end_time] => 14:00
                    )

                [2] => stdClass Object
                    (
                        [openhouse_id] => 58e826747919f36c7cd0074d92af04c5
                        [openhouse_date] => 2016-04-21
                        [start_time] => 12:00
                        [end_time] => 18:00
                        [interested] => 1
                        [attendence] => 0
                    )

                [3] => stdClass Object
                    (
                        [openhouse_id] => 852e29abf3524a0b8ceea3ada823e44e
                        [openhouse_date] => 2016-04-21
                        [start_time] => 18:15
                        [end_time] => 21:15
                    )

                [4] => stdClass Object
                    (
                        [openhouse_id] => 1112019fed147e1de6f1308852009653
                        [openhouse_date] => 2016-04-25
                        [start_time] => 09:15
                        [end_time] => 11:15
                    )

                [5] => stdClass Object
                    (
                        [openhouse_id] => 03ab091ad03df06dfb6dcf2cb7ad211a
                        [openhouse_date] => 2016-04-28
                        [start_time] => 03:15
                        [end_time] => 09:15
                    )

            )

    )

[2] => stdClass Object
    (
        [user_id] => 323
        [name] => Jasmine Baudin
        [id] => 6
        [openhouse_id] => 03ab091ad03df06dfb6dcf2cb7ad211a
        [property_id] => 5
        [interested] => 1
        [openhouse] => Array
            (
                [0] => stdClass Object
                    (
                        [openhouse_id] => 6e291b19bdca9a4d074976f0e8b9bcff
                        [openhouse_date] => 2016-04-07
                        [start_time] => 08:00
                        [end_time] => 17:00
                    )

                [1] => stdClass Object
                    (
                        [openhouse_id] => ca1927cee99722ac7fbd1a0588fdc4de
                        [openhouse_date] => 2016-04-14
                        [start_time] => 07:00
                        [end_time] => 14:00
                    )

                [2] => stdClass Object
                    (
                        [openhouse_id] => 58e826747919f36c7cd0074d92af04c5
                        [openhouse_date] => 2016-04-21
                        [start_time] => 12:00
                        [end_time] => 18:00
                    )

                [3] => stdClass Object
                    (
                        [openhouse_id] => 852e29abf3524a0b8ceea3ada823e44e
                        [openhouse_date] => 2016-04-21
                        [start_time] => 18:15
                        [end_time] => 21:15
                    )

                [4] => stdClass Object
                    (
                        [openhouse_id] => 1112019fed147e1de6f1308852009653
                        [openhouse_date] => 2016-04-25
                        [start_time] => 09:15
                        [end_time] => 11:15
                    )

                [5] => stdClass Object
                    (
                        [openhouse_id] => 03ab091ad03df06dfb6dcf2cb7ad211a
                        [openhouse_date] => 2016-04-28
                        [start_time] => 03:15
                        [end_time] => 09:15
                        [interested] => 1
                        [attendence] => 0
                    )
                [6] => stdClass Object
                    (
                        [openhouse_id] => 6e291b19bdca9a4d074976f0e8b9bcff
                        [openhouse_date] => 2016-04-07
                        [start_time] => 08:00
                        [end_time] => 17:00
                    )

                [7] => stdClass Object
                    (
                        [openhouse_id] => ca1927cee99722ac7fbd1a0588fdc4de
                        [openhouse_date] => 2016-04-14
                        [start_time] => 07:00
                        [end_time] => 14:00
                    )

                [8] => stdClass Object
                    (
                        [openhouse_id] => 58e826747919f36c7cd0074d92af04c5
                        [openhouse_date] => 2016-04-21
                        [start_time] => 12:00
                        [end_time] => 18:00
                    )

                [9] => stdClass Object
                    (
                        [openhouse_id] => 852e29abf3524a0b8ceea3ada823e44e
                        [openhouse_date] => 2016-04-21
                        [start_time] => 18:15
                        [end_time] => 21:15
                        [interested] => 1
                        [attendence] => 0
                    )

                [10] => stdClass Object
                    (
                        [openhouse_id] => 1112019fed147e1de6f1308852009653
                        [openhouse_date] => 2016-04-25
                        [start_time] => 09:15
                        [end_time] => 11:15
                    )

                [11] => stdClass Object
                    (
                        [openhouse_id] => 03ab091ad03df06dfb6dcf2cb7ad211a
                        [openhouse_date] => 2016-04-28
                        [start_time] => 03:15
                        [end_time] => 09:15
                    )

            )

    )

)

There can be multiple array with same user_id.可以有多个具有相同 user_id 的数组。

Untested, but you should be able to do this with relative ease.未经测试,但您应该能够相对轻松地做到这一点。

If you use the user_id which I assume is unique as your array key, you will be able to easily access a user's data whenever you need to.如果您使用我认为唯一的user_id作为您的数组键,您将能够在需要时轻松访问用户的数据。

You have the added bonus of being able to merge against existing keys or simply create new ones if they don't exist.您还有一个额外的好处是能够与现有密钥合并,或者如果它们不存在,则只需创建新密钥

For example:例如:

$output = array();
foreach ($input as $values) {
    $userId = $values->user_id;
    if (array_key_exists($userId, $output)) {
        // We've already added this user, so merge in openhouse
        $output[$userId]->openhouse = array_merge($output[$userId]->openhouse, $values->openhouse);
    } else {
        // We haven't added it yet, so just add everything
        $output[$userId] = $values;
    }
}

Now: looking at your sample data it looks like your openhouse array contains the same set of data, with a couple of keys that exist in each array here and there differentiating them.现在:查看您的示例数据,您的openhouse数组似乎包含相同的数据集,每个数组中存在几个键来区分它们。 If that's the case, you might want to use array_merge_recursive() instead.如果是这种情况,您可能希望改用array_merge_recursive() If you post a more usable example of your sample data I could have a play with it, but this should get you started.如果您发布一个更有用的示例数据示例,我可以尝试一下,但这应该可以帮助您入门。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM