ホームページ >バックエンド開発 >PHPチュートリアル >PHP でフラット配列からツリー構造を効率的に構築するにはどうすればよいですか?

PHP でフラット配列からツリー構造を効率的に構築するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-02 15:33:15687ブラウズ

How Can I Efficiently Build a Tree Structure from a Flat Array in PHP?

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

PHP でフラット配列からツリー データ構造を構築するのは困難な場合があります。ただし、このタスクは、再帰を適用し、フラット配列内の親子関係を理解することで簡素化できます。

各要素に 'id' と 'parent_id' があるフラット配列を想定すると、目的はそれを階層ツリーに変換することです。結果のツリー内の各要素に子要素がある場合は、「children」プロパティを持つ必要があります。

解決策

提供されたコードはツリーを再帰的に作成しようとしますが、要素をブランチに追加した後にその要素を削除できず、同じ要素のコピーが複数作成されます。この問題を解決するには、要素をブランチに追加した後、フラット配列から要素を削除する必要があります。

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['id']] = $element;
            unset($elements[$element['id']]);
        }
    }

    return $branch;
}

説明

  1. 配列。指定された親 ID を持つ要素をチェックします。
  2. 一致する要素が見つかった場合は、それを変数に代入し、再帰的に実行します。その子を収集します。
  3. 要素に子がある場合、それらを現在の要素の「children」プロパティに割り当てます。
  4. 要素をブランチに追加した後、フラットから削除します。重複を防ぐための配列です。
  5. ツリー全体が構築されるまで、このプロセスを再帰的に続けます。

結果の配列は次のようになります。ネストされた配列として子を含む各ノードを持つ階層ツリーとなり、元のフラットな配列の親子関係を明確に表現します。

以上がPHP でフラット配列からツリー構造を効率的に構築するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。