PHP parent_id 테이블을 트리 자료로 변환

1 개요[ | ]

PHP parent_id 테이블을 트리 자료로 변환
0-based key ★
$table1 = [
  ['id'=>1, 'value'=>'/'  , 'parent_id'=>0],
  ['id'=>2, 'value'=>'bin', 'parent_id'=>1],
  ['id'=>3, 'value'=>'etc', 'parent_id'=>1],
  ['id'=>4, 'value'=>'usr', 'parent_id'=>1],
  ['id'=>5, 'value'=>'bin', 'parent_id'=>4],
  ['id'=>6, 'value'=>'var', 'parent_id'=>1],
  ['id'=>7, 'value'=>'log', 'parent_id'=>6],
];

function buildTree($rows, $parent_id=0) {
  $branch = [];
  foreach($rows as $row) {
    if($row['parent_id'] == $parent_id) {
      $children = buildTree($rows, $row['id']);
      if($children) $row['children'] = $children;
      unset($row['parent_id']); // remove parent_id (optional)
      $branch[] = $row; // 0-based key
    }
  }
  return $branch;
}

$tree = buildTree($table1);
print_r($tree);
original id key
$table1 = [
  ['id'=>1, 'value'=>'/'  , 'parent_id'=>0],
  ['id'=>2, 'value'=>'bin', 'parent_id'=>1],
  ['id'=>3, 'value'=>'etc', 'parent_id'=>1],
  ['id'=>4, 'value'=>'usr', 'parent_id'=>1],
  ['id'=>5, 'value'=>'bin', 'parent_id'=>4],
  ['id'=>6, 'value'=>'var', 'parent_id'=>1],
  ['id'=>7, 'value'=>'log', 'parent_id'=>6],
];

function buildTree($rows, $parent_id=0) {
  $branch = [];
  foreach($rows as $row) {
    if($row['parent_id'] == $parent_id) {
      $children = buildTree($rows, $row['id']);
      if($children) $row['children'] = $children;
      unset($row['parent_id']); // remove parent_id (optional)
      $branch[$row['id']] = $row; // original id key
    }
  }
  return $branch;
}

$tree = buildTree($table1);
print_r($tree);

2 같이 보기[ | ]

3 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}