現在の位置: ホーム> 最新記事一覧> PHPでツリー構造図を実装する2つの方法:入れ子ループと再帰の詳細説明

PHPでツリー構造図を実装する2つの方法:入れ子ループと再帰の詳細説明

M66 2025-10-25

PHPでツリー構造図を作成する方法

Web サイトやシステム開発では、カテゴリ、権限管理、組織構造などの階層データを表示するためにツリー構造がよく使用されます。 PHP は、ツリー構造図を実装する柔軟な方法を提供します。主なアイデアは 2 つあります。それは、入れ子になったループを使用することと、再帰関数を使用することです。

方法 1: ネストされたループを使用してツリー構造を生成する

ネストされたループを実装するというアイデアは、配列を通じてノードとその親子関係を保存し、ループを使用してデータを走査し、親ノードと子ノードの間の対応する関係に基づいて HTML ツリー構造を継ぎ足すことです。

実装手順

  • ノードとその関係を含む配列を作成します。
  • 各ノードの親ノードと子ノードのインデックスを定義します。
  • 配列をループすることにより、対応する HTML タグがレイヤーごとに出力され、ツリー構造が形成されます。

サンプルコード

$nodes = [
    [
        'id' => 1,
        'parent_id' => null,
        'children' => [2, 3]
    ],
    [
        'id' => 2,
        'parent_id' => 1,
        'children' => []
    ],
    [
        'id' => 3,
        'parent_id' => 1,
        'children' => []
    ],
];

function createTree($nodes) {
    $tree = '<ul>';
    foreach ($nodes as $node) {
        $tree .= '<li>' . $node['id'];
        if (!empty($node['children'])) {
            $tree .= createTree($node['children']);
        }
        $tree .= '</li>';
    }
    $tree .= '</ul>';
    return $tree;
}

echo createTree($nodes);

上記のコードは、ループと関数呼び出しを通じて基本的なツリー構造の HTML を構築します。

方法 2: 再帰関数を使用してツリー構造を生成する

再帰的方法はネストされたループよりも簡潔であり、多くの階層関係を持つデータ構造の処理に適しています。再帰関数を通じてそれ自体を呼び出すことにより、複数レベルのノードを簡単に表示できます。

実装手順

  • ノードの深さに基づいて HTML 構造を動的に生成する再帰関数を定義します。
  • 関数内で各ノードが走査され、子ノードがあるかどうかが判断されます。
  • 子ノードがある場合は、関数を再度呼び出して、その基礎となる構造を生成します。

サンプルコード

function createTree($nodes, $depth = 0) {
    $tree = '';
    foreach ($nodes as $node) {
        $tree .= '<li style="padding-left:' . $depth * 10 . 'px">' . $node['id'] . '</li>';
        if (!empty($node['children'])) {
            $tree .= createTree($node['children'], $depth + 1);
        }
    }
    return $tree;
}

$nodes = [
    [
        'id' => 1,
        'parent_id' => null,
        'children' => [2, 3]
    ],
    [
        'id' => 2,
        'parent_id' => 1,
        'children' => []
    ],
    [
        'id' => 3,
        'parent_id' => 1,
        'children' => []
    ],
];

echo createTree($nodes);

この再帰的なアプローチにより、構造がより明確になり、その後のフロントエンドでのスタイルや対話型ロジックの追加が容易になります。

要約する

上記どちらの方法でもPHPツリー構造図の生成を実現できます。入れ子になったループはデータ構造が浅い場合に適していますが、再帰的メソッドはより柔軟で保守が容易です。実際のニーズに基づいて適切な実装方法を選択すると、開発効率とコードの可読性が大幅に向上します。