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

时间:2016-04-27 04:26:38

标签: php arrays loops

那里有很多阵列功能,我尝试了几个甚至尝试做几次循环...我无法做到。 下面给出的数组是我的结果数组,相同的用户被多次插入,因为它们的值不同。改变所有机制将是一个好主意,但我在项目的最后阶段。如果有人可以这样做,请回复:

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
                    )

            )

    )

)

在上面的数组中,我有相同的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
                    )

            )

    )

)

可以有多个用户具有相同的user_id。

1 个答案:

答案 0 :(得分:1)

未经测试,但您应该可以相对轻松地完成此操作。

如果您使用我认为唯一的user_id作为您的数组键,您将能够在需要时轻松访问用户的数据。

您还可以与现有密钥合并,或者只是在不存在时创建新的

例如:

$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;
    }
}

现在:查看您的示例数据,看起来您的openhouse数组包含相同的数据集,每个数组中都存在几个键,这些键区别于它们。如果是这种情况,您可能希望使用array_merge_recursive()。如果您发布一个更有用的示例数据示例,我可以使用它,但这应该可以让您开始。