Конвертировать плоский массив PHP в многомерный массив

0

У меня есть следующая структура массива:

[parents] => Array
    (
        [0] => Array
            (
                [id] => 1
                [user_id] => 1
                [created] => 2014-11-09 13:47:37
                [content] => This is a test discussion
                [status] => 1
                [parent] => 0
                [project_id] => 1
            )

        [1] => Array
            (
                [id] => 4
                [user_id] => 1
                [created] => 2014-11-09 13:52:02
                [content] => 456789
                [status] => 1
                [parent] => 0
                [project_id] => 1
            )

    )

[children] => Array
    (
        [0] => Array
            (
                [id] => 2
                [user_id] => 1
                [created] => 2014-11-09 13:47:53
                [content] => This is a test reply....
                [status] => 1
                [parent] => 1
                [project_id] => 1
            )

        [1] => Array
            (
                [id] => 3
                [user_id] => 1
                [created] => 2014-11-09 13:48:13
                [content] => This is a test reply....!!!
                [status] => 1
                [parent] => 1
                [project_id] => 1
            )

        [2] => Array
            (
                [id] => 5
                [user_id] => 1
                [created] => 2014-11-09 13:52:17
                [content] => 8765432
                [status] => 1
                [parent] => 4
                [project_id] => 1
            )

    )

Я хотел бы объединить их в отношения между родителями и дочерними элементами, чтобы они выглядели следующим образом:

[parents] => Array
    (
        [0] => Array
            (
                [id] => 1
                [user_id] => 1
                [created] => 2014-11-09 13:47:37
                [content] => This is a test discussion
                [status] => 1
                [parent] => 0
                [project_id] => 1
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 2
                                [user_id] => 1
                                [created] => 2014-11-09 13:47:53
                                [content] => This is a test reply....
                                [status] => 1
                                [parent] => 1
                                [project_id] => 1
                            )

                        [1] => Array
                            (
                                [id] => 3
                                [user_id] => 1
                                [created] => 2014-11-09 13:48:13
                                [content] => This is a test reply....!!!
                                [status] => 1
                                [parent] => 1
                                [project_id] => 1
                            )
                        )
            )
     )

Как я могу это сделать с PHP?

Теги:
arrays
multidimensional-array

1 ответ

1
Лучший ответ

Предполагая, что все id уникальны в массиве ваших parents, вы можете сделать это:

// build a new array using parent ID values as the key, 
// to simplify searching for parent IDs. 
foreach ($parents as $key => $value){
    $merged[$value['id']] = $value;
}

foreach ($children as $child){
    $parentID = $child['parent'];
    if (array_key_exists( $parentID, $merged )) {
        // add the child array to its parent ['children'] value
        $merged[$parentID]['children'][] = $child;
    }
}

В результирующем массиве $merged ключ каждого родительского элемента будет установлен на его id, и все дети будут вложены под соответствующими родителями.

  • 0
    Вау, очень, очень приятно! Brilliant!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню