Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung von Beispielen für Implementierungsmethoden der PHP Infinitus-Klassifizierungsfunktion

Detaillierte Erläuterung von Beispielen für Implementierungsmethoden der PHP Infinitus-Klassifizierungsfunktion

怪我咯
怪我咯Original
2018-05-14 16:01:262781Durchsuche

In diesem Artikel wird hauptsächlich die Implementierungsmethode der PHP-Infinitus-Klassifizierungsfunktion vorgestellt und die spezifischen Ideen, der Implementierungscode und die damit verbundenen Vorsichtsmaßnahmen für PHP zur Implementierung der Infinitus-Klassifizierung in Form von Beispielen detailliert analysiert.

Das Beispiel in diesem Artikel beschreibt die Implementierungsmethode der PHP Infinitus-Klassifizierungsfunktion. Geben Sie es wie folgt als Referenz an alle weiter:

Bei der Entwicklung eines Programms müssen wir manchmal alle Spaltenbeziehungen (einschließlich Spalten der ersten Ebene, Spalten der zweiten Ebene, Spalten der dritten Ebene usw.) abrufen eine Baumstruktur bilden. Sie können Rekursion oder Referenz verwenden (Referenzen in PHP ähneln Zeigern in C oder C++, nur um es anders auszudrücken).

Infinitus-Klassifizierung durch Referenz realisieren

Idee:

1 Das heißt, alle zu verarbeitenden Daten werden in abonnierte Primärschlüssel-IDs verpackt. pk)-Array, um das Abrufen der entsprechenden übergeordneten Spalte mit pid zu erleichtern.

2. Durchlaufen Sie die umschlossenen Daten. Wenn es sich um den Stammknoten handelt, fügen Sie seinen Verweis auf den Baum hinzu, andernfalls fügen Sie seinen Verweis auf das untergeordnete Element seiner übergeordneten Klasse hinzu. Auf diese Weise wird zwar nur der Wurzelknoten zum Baum hinzugefügt, aber wenn jeder Wurzelknoten untergeordnete Elemente hat, enthält er Verweise auf die untergeordneten Elemente. Daher kann es eine Baumform bilden.

Der Code ist wie folgt

/**
 * 把返回的数据集转换成Tree
 * @param array $list 要转换的数据集
 * @param string $pk 自增字段(栏目id)
 * @param string $pid parent标记字段
 * @return array
 * @author dqs <1696232133@qq.com>
 */
function make_tree($list,$pk=&#39;id&#39;,$pid=&#39;pid&#39;,$child=&#39;_child&#39;,$root=0){
  $tree=array();
  $packData=array();
  foreach ($list as $data) {
    $packData[$data[$pk]] = $data;
  }
  foreach ($packData as $key =>$val){
    if($val[$pid]==$root){//代表跟节点
      $tree[]=& $packData[$key];
    }else{
      //找到其父类
      $packData[$val[$pid]][$child][]=& $packData[$key];
    }
  }
  return $tree;
}

Die Datenstruktur ist wie folgt:

Das Ausführungsergebnis ist wie folgt

Array
(
  [0] => Array
    (
      [id] => 6
      [pid] => 0
      [title] => 测试1
      [url] => test1
      [sort] => 0
      [create_time] => 1464076199
      [update_time] => 1464076199
      [status] => 1
      [target] => 0
    )
  [1] => Array
    (
      [id] => 7
      [pid] => 0
      [title] => 测试2
      [url] => test2
      [sort] => 0
      [create_time] => 1464076218
      [update_time] => 1464076218
      [status] => 1
      [target] => 0
    )
  [2] => Array
    (
      [id] => 1
      [pid] => 0
      [title] => 首页
      [url] => Index/index
      [sort] => 1
      [create_time] => 1379475111
      [update_time] => 1379923177
      [status] => 1
      [target] => 0
    )
  [3] => Array
    (
      [id] => 2
      [pid] => 0
      [title] => 博客
      [url] => Article/index?category=blog
      [sort] => 2
      [create_time] => 1379475131
      [update_time] => 1379483713
      [status] => 1
      [target] => 0
      [_child] => Array
        (
          [0] => Array
            (
              [id] => 4
              [pid] => 2
              [title] => 个人博客
              [url] => ownblog
              [sort] => 0
              [create_time] => 1464075558
              [update_time] => 1464075558
              [status] => 1
              [target] => 0
              [_child] => Array
                (
                  [0] => Array
                    (
                      [id] => 8
                      [pid] => 4
                      [title] => 新浪博客
                      [url] => sinaBlog
                      [sort] => 0
                      [create_time] => 1464077276
                      [update_time] => 1464077276
                      [status] => 1
                      [target] => 0
                    )
                )
            )
          [1] => Array
            (
              [id] => 5
              [pid] => 2
              [title] => 他人博客
              [url] => otherBlog
              [sort] => 0
              [create_time] => 1464075582
              [update_time] => 1464075582
              [status] => 1
              [target] => 0
            )
        )
    )
  [4] => Array
    (
      [id] => 3
      [pid] => 0
      [title] => 官网
      [url] => http://www.onethink.cn
      [sort] => 3
      [create_time] => 1379475154
      [update_time] => 1387163458
      [status] => 1
      [target] => 0
    )
)

Zusätzliche Infinitus-Klassifizierungsfunktion in OneThink

/**
 * 把返回的数据集转换成Tree
 * @param array $list 要转换的数据集
 * @param string $pid parent标记字段
 * @param string $level level标记字段
 * @return array
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
function list_to_tree($list, $pk=&#39;id&#39;, $pid = &#39;pid&#39;, $child = &#39;_child&#39;, $root = 0) {
  // 创建Tree
  $tree = array();
  if(is_array($list)) {
    // 创建基于主键的数组引用
    $refer = array();
    foreach ($list as $key => $data) {
      $refer[$data[$pk]] =& $list[$key];
    }
    foreach ($list as $key => $data) {
      // 判断是否存在parent
      $parentId = $data[$pid];
      if ($root == $parentId) {
        $tree[] =& $list[$key];
      }else{
        if (isset($refer[$parentId])) {
          $parent =& $refer[$parentId];
          $parent[$child][] =& $list[$key];
        }
      }
    }
  }
  return $tree;
}

Infinitus-Klassifizierung durch Rekursion realisieren

Idee:

1. Verwenden Sie Loop, um jeweils alle Wurzelknoten abzurufen.

2. Entfernen Sie beim Abrufen jedes Knotens den Knoten aus den Originaldaten und rufen Sie alle seine untergeordneten Knoten rekursiv ab, bis die Originaldaten leer sind.

Der Code ist wie folgt implementiert:

function make_tree1($list,$pk=&#39;id&#39;,$pid=&#39;pid&#39;,$child=&#39;_child&#39;,$root=0){
  $tree=array();
  foreach($list as $key=> $val){
    if($val[$pid]==$root){
      //获取当前$pid所有子类
        unset($list[$key]);
        if(! empty($list)){
          $child=make_tree1($list,$pk,$pid,$child,$val[$pk]);
          if(!empty($child)){
            $val[&#39;_child&#39;]=$child;
          }
        }
        $tree[]=$val;
    }
  }
  return $tree;
}

Der Screenshot des Effekts lautet wie folgt:

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung von Beispielen für Implementierungsmethoden der PHP Infinitus-Klassifizierungsfunktion. 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