Maison  >  Article  >  développement back-end  >  Exemple de code de formatage de données d'arbre de classification illimité PHP, explication détaillée

Exemple de code de formatage de données d'arbre de classification illimité PHP, explication détaillée

墨辰丷
墨辰丷original
2018-06-01 10:06:332053parcourir

Cet article présente principalement le code de formatage des données de l'arbre de classification illimité PHP. Les amis qui en ont besoin peuvent se référer au

code original :

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));


Ce qui suit est le supplément :


/**
 * 此方法由@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] => 鸡西市
          )
 
      )
 
  )
)*/


Extrêmement simple et efficace ! ! ! Très utile !

Résumé : Ce qui précède représente l’intégralité du contenu de cet article, j’espère qu’il sera utile à l’étude de chacun.

Recommandations associées :

phpclasse smartBC encapsulée

php Rollback physique dans

phpFonction et utilisation de la méthode magique

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn