Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung des Codebeispiels für den unbegrenzten PHP-Klassifizierungsbaumdatenformatierungscode

Ausführliche Erläuterung des Codebeispiels für den unbegrenzten PHP-Klassifizierungsbaumdatenformatierungscode

墨辰丷
墨辰丷Original
2018-06-01 10:06:332033Durchsuche

In diesem Artikel wird hauptsächlich der PHP-Code für die unbegrenzte Formatierung von Klassifizierungsbaumdaten vorgestellt. Freunde, die ihn benötigen, können sich auf den

Originalcode beziehen:

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


Der Im Folgenden finden Sie Ergänzungen:


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


Extrem einfach und effektiv! ! ! Sehr nützlich!

Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird.

Verwandte Empfehlungen:

phpgekapselte SmartBC-Klasse

php Physisches Rollback in

phpFunktion und Verwendung der magischen Methode

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung des Codebeispiels für den unbegrenzten PHP-Klassifizierungsbaumdatenformatierungscode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn