ホームページ >バックエンド開発 >PHPチュートリアル >レコードの配列をネストされたツリー構造に効率的に変換するにはどうすればよいですか?

レコードの配列をネストされたツリー構造に効率的に変換するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-29 12:55:11568ブラウズ

How to Efficiently Convert an Array of Records into a Nested Tree Structure?

レコードの配列をツリー構造に効率的に変換する方法

このシナリオでは、階層構造を表すレコードの配列があります。 。各レコードには ID、親 ID、および名前があります。目的は、この配列をネストされたツリー構造に変換することです。ルート ノードに子ノードがあり、さらにその子ノードが独自の子ノードを持つこともあります。

これを実現するために、createTree という再帰関数が使用されます。この関数は、レコードの配列への参照と親配列の 2 つのパラメーターを取ります。親配列を反復処理し、親ごとに、レコードの配列に子レコードがあるかどうかを確認します。子レコードが存在する場合、createTree 関数を再帰的に呼び出して処理し、結果を親の Children プロパティに割り当てます。

次に例を示します。

$arr = array(
  array('id' => 100, 'parentid' => 0, 'name' => 'a'),
  array('id' => 101, 'parentid' => 100, 'name' => 'a'),
  array('id' => 102, 'parentid' => 101, 'name' => 'a'),
  array('id' => 103, 'parentid' => 101, 'name' => 'a'),
);

$new = array();
foreach ($arr as $a){
    $new[$a['parentid']][] = $a;
}
$tree = createTree($new, array($arr[0]));
print_r($tree);

function createTree(&$list, $parent){
    $tree = array();
    foreach ($parent as $k =>$l){
        if(isset($list[$l['id']])){
            $l['children'] = createTree($list, $list[$l['id']]);
        }
        $tree[] = $l;
    } 
    return $tree;
}

このコードは、目的のツリー構造を出力します。 createTree 関数は、親レコードを子レコードに再帰的に変換し、データの階層ツリー表現を作成します。この関数は入力配列への参照に基づいて動作するため、変更を元の配列に反映できることに注意してください。

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

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