"PHP parent id 테이블을 트리 자료로 변환"의 두 판 사이의 차이

잔글 (봇: 자동으로 텍스트 교체 (-</source> +</syntaxhighlight>, -<source +<syntaxhighlight ))
 
(다른 사용자 한 명의 중간 판 4개는 보이지 않습니다)
3번째 줄: 3번째 줄:
;PHP parent_id 테이블을 트리 자료로 변환
;PHP parent_id 테이블을 트리 자료로 변환


<source lang='php' run>
{{소스헤더|0-based key ★}}
<syntaxhighlight lang='php' run>
$table1 = [
$table1 = [
   ['id'=>1, 'value'=>'/'  , 'parent_id'=>0],
   ['id'=>1, 'value'=>'/'  , 'parent_id'=>0],
21번째 줄: 22번째 줄:
       if($children) $row['children'] = $children;
       if($children) $row['children'] = $children;
       unset($row['parent_id']); // remove parent_id (optional)
       unset($row['parent_id']); // remove parent_id (optional)
       $branch[] = $row;
       $branch[] = $row; // 0-based key
     }
     }
   }
   }
29번째 줄: 30번째 줄:
$tree = buildTree($table1);
$tree = buildTree($table1);
print_r($tree);
print_r($tree);
</source>
</syntaxhighlight>
 
{{소스헤더|original id key}}
<syntaxhighlight lang='php' run>
$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);
</syntaxhighlight>


==같이 보기==
==같이 보기==

2020년 11월 2일 (월) 02:57 기준 최신판

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 }}