Home  >  Article  >  Backend Development  >  PHP unlimited classification tree data formatting code example detailed explanation

PHP unlimited classification tree data formatting code example detailed explanation

墨辰丷
墨辰丷Original
2018-06-01 10:06:331986browse

This article mainly introduces the PHP unlimited classification tree data formatting code. Friends who need it can refer to the

original code:

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, 'name' => '二级22' ),
    array('id' => 3, 'pid' => 1, 'name' => '二级23' ),
    array('id' => 12, 'pid' => 11, 'name' => '二级24' ),
    array('id' => 9, 'pid' => 1, 'name' => '二级25' ),
    array('id' => 14, 'pid' => 1, 'name' => '二级26' ),
    array('id' => 4, 'pid' => 9, 'name' => '三级31' ),
    array('id' => 6, 'pid' => 9, 'name' => '三级32' ),
    array('id' => 7, 'pid' => 4, 'name' => '四级41' ),
    array('id' => 8, 'pid' => 4, 'name' => '四级42' ),
    array('id' => 5, 'pid' => 4, 'name' => '四级43' ),
    array('id' => 13, 'pid' => 4, 'name' => '四级44' ),
    array('id' => 15, 'pid' => 8, 'name' => '五级51' ),
    array('id' => 16, 'pid' => 8, 'name' => '五级52' ),
    array('id' => 17, 'pid' => 8, 'name' => '五级53' ),
    array('id' => 18, 'pid' => 16, 'name' => '六级64' ),
); 
var_dump(genTree($items1));


# #The following is a supplement:


/**
 * 此方法由@Tonton 提供
 * http://my.oschina.net/u/918697
 * @date 2012-12-12
 */
function genTree5($items) {
  foreach ($items as $item)
    $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
  return isset($items[0]['son']) ? $items[0]['son'] : array();
}


##

/**
 * 将数据格式化成树形结构
 * @author Xuefen.Tong
 * @param array $items
 * @return array
 */
function genTree9($items) {
  $tree = array(); //格式化好的树
  foreach ($items as $item)
    if (isset($items[$item['pid']]))
      $items[$item['pid']]['son'][] = &$items[$item['id']];
    else
      $tree[] = &$items[$item['id']];
  return $tree;
}
 
$items = array(
  1 => array('id' => 1, 'pid' => 0, 'name' => '江西省'),
  2 => array('id' => 2, 'pid' => 0, 'name' => '黑龙江省'),
  3 => array('id' => 3, 'pid' => 1, 'name' => '南昌市'),
  4 => array('id' => 4, 'pid' => 2, 'name' => '哈尔滨市'),
  5 => array('id' => 5, 'pid' => 2, 'name' => '鸡西市'),
  6 => array('id' => 6, 'pid' => 4, 'name' => '香坊区'),
  7 => array('id' => 7, 'pid' => 4, 'name' => '南岗区'),
  8 => array('id' => 8, 'pid' => 6, 'name' => '和兴路'),
  9 => array('id' => 9, 'pid' => 7, 'name' => '西大直街'),
  10 => array('id' => 10, 'pid' => 8, 'name' => '东北林业大学'),
  11 => array('id' => 11, 'pid' => 9, 'name' => '哈尔滨工业大学'),
  12 => array('id' => 12, 'pid' => 8, 'name' => '哈尔滨师范大学'),
  13 => array('id' => 13, 'pid' => 1, 'name' => '赣州市'),
  14 => array('id' => 14, 'pid' => 13, 'name' => '赣县'),
  15 => array('id' => 15, 'pid' => 13, 'name' => '于都县'),
  16 => array('id' => 16, 'pid' => 14, 'name' => '茅店镇'),
  17 => array('id' => 17, 'pid' => 14, 'name' => '大田乡'),
  18 => array('id' => 18, 'pid' => 16, 'name' => '义源村'),
  19 => array('id' => 19, 'pid' => 16, 'name' => '上坝村'),
);

print_r(genTree5($items));
print_r(genTree9($items));
//后者输出格式,前者类似,只是数组键值不一样,不过不影响数据结构

/*
Array
(
[0] => Array
  (
    [id] => 1
    [pid] => 0
    [name] => 江西省
    [son] => Array
      (
        [0] => Array
          (
            [id] => 3
            [pid] => 1
            [name] => 南昌市
          )
 
        [1] => Array
          (
            [id] => 13
            [pid] => 1
            [name] => 赣州市
            [son] => Array
              (
                [0] => Array
                  (
                    [id] => 14
                    [pid] => 13
                    [name] => 赣县
                    [son] => Array
                      (
                      [0] => Array
                        (
                          [id] => 16
                          [pid] => 14
                          [name] => 茅店镇
                          [son] => Array
                            (
                            [0] => Array
                              (
                              [id] => 18
                              [pid] => 16
                              [name] => 义源村
                              )
 
                            [1] => Array
                              (
                              [id] => 19
                              [pid] => 16
                              [name] => 上坝村
                              )
 
                            )
 
                        )
 
                      [1] => Array
                        (
                          [id] => 17
                          [pid] => 14
                          [name] => 大田乡
                        )
 
                      )
 
                  )
 
                [1] => Array
                  (
                    [id] => 15
                    [pid] => 13
                    [name] => 于都县
                  )
 
              )
 
          )
 
      )
 
  )
 
[1] => Array
  (
    [id] => 2
    [pid] => 0
    [name] => 黑龙江省
    [son] => Array
      (
        [0] => Array
          (
            [id] => 4
            [pid] => 2
            [name] => 哈尔滨市
            [son] => Array
              (
              [0] => Array
                (
                  [id] => 6
                  [pid] => 4
                  [name] => 香坊区
                  [son] => Array
                    (
                    [0] => Array
                      (
                        [id] => 8
                        [pid] => 6
                        [name] => 和兴路
                        [son] => Array
                          (
                            [0] => Array
                              (
                              [id] => 10
                              [pid] => 8
                              [name] =>
                               东北林业大学
                              )
 
                            [1] => Array
                              (
                              [id] => 12
                              [pid] => 8
                              [name] =>
                              哈尔滨师范大学
                              )
 
                          )
 
                      )
 
                    )
 
                )
 
              [1] => Array
                (
                  [id] => 7
                  [pid] => 4
                  [name] => 南岗区
                  [son] => Array
                    (
                    [0] => Array
                      (
                      [id] => 9
                      [pid] => 7
                      [name] => 西大直街
                      [son] => Array
                        (
                        [0] => Array
                          (
                          [id] => 11
                          [pid] => 9
                          [name] =>
                           哈尔滨工业大学
                          )
 
                        )
 
                      )
 
                    )
 
                )
 
              )
 
          )
 
        [1] => Array
          (
            [id] => 5
            [pid] => 2
            [name] => 鸡西市
          )
 
      )
 
  )
)*/


Extremely Simple and effective! ! ! Very useful!

Summary: The above is the entire content of this article, I hope it will be helpful to everyone's study.

Related recommendations:

phpEncapsulated smartBC class

php Physical rollback in

phpMagic method function and usage

The above is the detailed content of PHP unlimited classification tree data formatting code example detailed explanation. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn