PHP でフラット配列から階層ツリー構造を構築する方法

Barbara Streisand
リリース: 2024-11-27 18:33:15
オリジナル
183 人が閲覧しました

How to Build a Hierarchical Tree Structure from a Flat Array in PHP?

PHP でフラット配列からツリー構造を構築する

問題:

「id」フィールドと「parent_id」フィールドを持つ要素で構成されるフラット配列。各要素には最大でも1 人の親と 0 人以上の子。 「parent_id」が 0 の場合、その要素はルート レベルの項目です。目標は、このフラットな配列を子と親の関係を持つ階層ツリーに再構築することです。

解決策:

提供されている関数 buildTree() がこのタスクを効果的に実行します。入力配列を反復処理し、ツリー構造を再帰的に構築します。出力ツリーの各要素には、その ID、親 ID、および子要素の配列が含まれます。

実装:

function buildTree(array &$elements, $parentId = 0) {
    $branch = array();

    foreach ($elements as $element) {
        if ($element['parent_id'] == $parentId) {
            $children = buildTree($elements, $element['id']);
            if ($children) {
                $element['children'] = $children;
            }
            $branch[] = $element;
            unset($elements[$element['id']]);
        }
    }

    return $branch;
}
ログイン後にコピー

「unset」 Call:

上記のコードでは、unset() 呼び出しは、階層構造。元の入力配列から処理された要素を削除し、ツリー内で要素が重複しないようにします。

例:

指定された入力配列を考慮します:

[_319_] => [...],
[_320_] => [...],
[_321_] => [...],
[_322_] => [...],
[_323_] => [...],
[_324_] => [...],
[_325_] => [...]
ログイン後にコピー

処理後、出力ツリーは親子関係を維持します関係:

[_319_] => [...],
[_320_] => [
    'id' => '_320_',
    'parent_id' => 0,
    'children' => [
        [_321_] => [...],
        [_325_] => [...]
    ]
],
[_323_] => [
    'id' => '_323_',
    'parent_id' => 0,
    'children' => [
        [_324_] => [...]
    ]
]
ログイン後にコピー

したがって、buildTree() 関数を使用すると、親子関係を持つ要素のフラットな配列を PHP の構造化された階層ツリーに変換できます。

以上がPHP でフラット配列から階層ツリー構造を構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート