-1

親から子へと順番に再配置したい配列があります。ここで私の配列では、一意の値「table_id」と値「parent_table」を取得しました。したがって、parent_table は「table_id」が存在するかどうかを確認します。存在する場合は、その「table_id」の下に入ります。コードは次のとおりです。

    Array
(
[0] => Array
(
[table_id] => 7
[table_name] => Macro
[parent_table] => 1
)
[1] => Array
(
[table_id] => 4
[table_name] => Dise
[parent_table] => 7
)
[2] => Array
(
[table_id] => 5
[table_name] => Cox
[parent_table] => 7
)
[3] => Array
(
[table_id] => 6
[table_name] => Ripo
[parent_table] => 4
)
)

サンプル出力:

 Array
       (
         [1] => Array
                    (
                    [table_id] => 7
                    [table_name] => Macro
                    [parent_table] => 1
                    [7] => Array
                               (
                               [table_id] => 4
                               [table_name] => Dise
                               [parent_table] => 7
                               [4] => Array
                                          (
                                           [table_id] => 6
                                           [table_name] => Ripo
                                           [parent_table] => 4
                                           )
                                )
                     [7] => Array
                                 (
                                 [table_id] => 5
                                 [table_name] => Cox
                                 [parent_table] => 7
                                 )
               )
)

私はphpに非常に慣れていないので、いくつかのアイデアを提供してください。

4

1 に答える 1

1

いくつかのforeachループと参照を使用できます。

// Build a new array, with nodes indexed by table_id
$byID = array();
foreach ($arr as $node) {
    $byID[$node['table_id']] = $node;
}

// Append child nodes to their parents' child_tables arrays
foreach ($byID as &$node) {
    if (isset($node['parent_table'])) {
        $byID[$node['parent_table']]['child_tables'][] =& $node;
    }
}

次に、ツリー全体は次のように表され$byID[1]ます。

Array
(
    [child_tables] => Array
        (
            [0] => Array
                (
                    [table_id] => 7
                    [table_name] => Macro
                    [parent_table] => 1
                    [child_tables] => Array
                        (
                            [0] => Array
                                (
                                    [table_id] => 4
                                    [table_name] => Dise
                                    [parent_table] => 7
                                    [child_tables] => Array
                                        (
                                            [0] => Array
                                                (
                                                    [table_id] => 6
                                                    [table_name] => Ripo
                                                    [parent_table] => 4
                                                )

                                        )

                                )

                            [1] => Array
                                (
                                    [table_id] => 5
                                    [table_name] => Cox
                                    [parent_table] => 7
                                )

                        )

                )

        )

)
于 2013-01-14T13:02:56.357 に答える