シンプルさが一番です....
- function genTree($items,$id='id',$pid='pid',$son = 'children'){
- $tree = array() //フォーマットされたツリー
- $tmpMap = array( ); //一時フラットデータ
-
- foreach ($items as $item) {
- $tmpMap[$item[$id]] = $item;
- }
-
- foreach ($items as $item) {
- if (isset ($tmpMap[$item[$pid]])) {
- $tmpMap[$item[$pid]][$son][] = &$tmpMap[$item[$id]];
- } else {
- $ tree[] = &$tmpMap[$item[$id]];
- }
- }
- unset($tmpMap);
- return $tree;
- }
-
- $items1 = array(
- array('id' = > 1, 'pid' => 0, 'name' => 'レベル 11' ),
- array('id' => 11, 'pid' => 0, 'name' => 'レベル 12 ' ),
- array('id' => 2, 'pid' => 1, 'name' => 'レベル 21' ),
- array('id' => 10, 'pid' => ; 11, '名前' => 'レベル 22' ),
- array('id' => 3, 'pid' => 1, '名前' => 'レベル 23 ' ),
- array(' id' => 12, 'pid' => 11, 'name' => 'レベル 24' ),
- array('id' => 1, 'name' = > 'レベル 25' ),
- array('id' => 14, 'pid' => 1, 'name' => 'レベル 26' ),
- array('id' => 4, 'pid' => 9, 'name' => 'レベル 3 31' ),
- array('id' => 9, 'name' => 'レベル 3 32 ' ),
- array('id' => 7, 'pid' => 4, 'name' => 'レベル 4 41' ),
- array('id ' => 8, 'pid' = > 4, '名前' => 'レベル 4 42' ),
- array('id' => 5, 'pid' => 4, '名前' = > 'レベル 4 43' ),
- array('id' => 13, 'pid' => 4, 'name' => 'レベル 4 44' ),
- array('id' => 15, 'pid' => 8, 'name' => 'レベル 5 51' ),
- array('id' => 16, 'pid' => 8, 'name' => '5 レベル 52' ),
- array('id ' => 17, 'pid' => 8, 'name' => 'レベル 53' ),
- array('id' => 16, 'name' => ; 'レベル 6 64' ),
- );
- var_dump(genTree($items1));
コードをコピーします
|