ホームページ >バックエンド開発 >PHPチュートリアル >レコードの配列をネストされたツリー構造に効率的に変換するにはどうすればよいですか?
レコードの配列をツリー構造に効率的に変換する方法
このシナリオでは、階層構造を表すレコードの配列があります。 。各レコードには 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 サイトの他の関連記事を参照してください。