ホームページ  >  記事  >  バックエンド開発  >  PHP で 2 次元配列をツリー構造に変換する方法について話しましょう

PHP で 2 次元配列をツリー構造に変換する方法について話しましょう

PHPz
PHPzオリジナル
2023-04-12 13:57:08888ブラウズ

ネットワーク アプリケーションの継続的な開発に伴い、フロントエンドとバックエンドを分離して開発される Web サイトやアプリケーションがますます増えています。これにより、フロントエンド コードがバックエンド コードから分離され、データ対話による通信が必要になります。データ対話のプロセスでは、配列、特に 2 次元配列がよく使用されます。では、2次元配列をツリー構造に変換するにはどうすればよいでしょうか?この記事では、PHP で 2 次元配列をツリーに変換する方法を紹介します。

1. ツリー構造とは

2次元配列をツリー形状に変換する方法を紹介する前に、まずツリー構造とは何かを理解しましょう。コンピューター サイエンスでは、ツリー構造は非線形データ構造であり、n (n > 0) 個の限定されたノードで構成される一連の階層関係です。ノードの 1 つはルート ノードと呼ばれ、残りのノードはツリー構造の 1 つ以上のサブツリーとして見ることができます。

簡単な例を見てみましょう。たとえば、会社の組織構造をツリー構造で表示できます。最上位は部長 (ルート ノード) で、複数の部門長 (子ノード) が存在します。それぞれ 部長以下に複数の社員(リーフノード)が存在します。

2. 2 次元配列をツリー構造に変換する原理

2 次元配列をツリー構造に変換すると、その内部構造を利用して、フラットなデータの集合とみなすことができます。変換する関係をツリー データ構造に編成するプロセス。変換プロセスは再帰的に実装できます。具体的な手順は次のとおりです:

  1. 2 次元配列からルート ノード データを検索し、配列から削除し、子ノードを再帰的に検索します。ルートノードの下にあります。
  2. 配列全体を走査し、各要素の子ノードをスタックにプッシュし、子ノードの下にある子ノードを再帰的に検索します。
  3. 再帰的な終了条件は、現在の配列が空であるか、現在のノードの子ノードが存在しないことです。

以上の3ステップにより、2次元配列をツリーに変換する機能が実現できます。

3. コードの実装

実践的な例を使用して、2 次元配列をツリー構造に変換する方法を示します。次の 2 次元配列があるとします。

$data = array(
    array('id'=>1,'name'=>'节点1','pid'=>0),
    array('id'=>2,'name'=>'节点2','pid'=>1),
    array('id'=>3,'name'=>'节点3','pid'=>2),
    array('id'=>4,'name'=>'节点4','pid'=>2),
    array('id'=>5,'name'=>'节点5','pid'=>0)
);

この配列には 5 つのノードが含まれます。ここで、id はノードの一意の識別子を表し、name はノード名を表し、pid はノードの親ノード ID を表します。

次に、この 2 次元配列を次のツリー構造に変換する必要があります:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 节点1
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [name] => 节点2
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 3
                                            [name] => 节点3
                                            [children] => Array()
                                        )

                                    [1] => Array
                                        (
                                            [id] => 4
                                            [name] => 节点4
                                            [children] => Array()
                                        )

                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 5
            [name] => 节点5
            [children] => Array()
        )

)

具体的な実装プロセスは次のとおりです:

function buildTree(&$data,$pid = 0){
    $tree = array();
    foreach($data as $k=>$v){
        if($v['pid'] == $pid){
            $temp = $v;
            $temp['children'] = buildTree($data,$v['id']);
            $tree[] = $temp;
            unset($data[$k]);
        }
    }
    return $tree;
}

$data =    array(
    array('id'=>1,'name'=>'节点1','pid'=>0),
    array('id'=>2,'name'=>'节点2','pid'=>1),
    array('id'=>3,'name'=>'节点3','pid'=>2),
    array('id'=>4,'name'=>'节点4','pid'=>2),
    array('id'=>5,'name'=>'节点5','pid'=>0)
);
print_r(buildTree($data));

上記のコードでは、 buildTree 関数は最初に空の配列 $tree をインスタンス化し、次に $data 配列全体を走査し、pid $pid を持つすべてのデータを $tree 配列に格納し、$pid の下にあるすべての子ノードを再帰的に検索して、$tree 配列を返します。 。 $data 配列が空であるか、現在のノードの子ノードがない場合、再帰は終了します。

4. 概要

上記のコードを通して、2 次元配列をツリー構造に変換するプロセスが非常に単純であることがわかります。すべてを変換するには再帰を使用するだけです。ノードを順番にツリー構造に整理するだけです。これは、Web 開発におけるデータの処理と表示に非常に役立ち、さまざまなシナリオでデータ表示とデータ構造編成のさまざまな機能を実現できます。

以上がPHP で 2 次元配列をツリー構造に変換する方法について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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