Heim > Artikel > Backend-Entwicklung > Beispiel einer PHP+MySQL-Abfrage, um eine unbegrenzte Ausgabe eines Klassifizierungsbaums auf niedrigerer Ebene zu erreichen
Dieser Artikel beschreibt das Beispiel einer PHP+MySQL-Abfrage, um unbegrenzt niedrigere zu erreichen. Ausgabe des Ebenenklassifizierungsbaums. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:
Das hier eingeführte PHP in Kombination mit MySQL zur Abfrage der unendlichen untergeordneten Baumausgabe ist tatsächlich eine unendliche Klassifizierung. Ich habe mehrere Beispiele für unbegrenzte Klassifizierung in PHP für Sie zusammengestellt.
[Verwandte Lernempfehlungen: PHP-Programmierung (Video), MySQL-Video-Tutorial]
Baumausgabe:
function get_array($user_id,$top=0){ global $mysql,$_G; $sql = "select user_id as name from `{spreads_users}` where p1.spreads_userid='{$user_id}'"; $rows= $mysql->db_fetch_arrays($sql); if($top==1){ $arr[0]['name']=$user_id; $arr[0]['children']=array(); } $top=$top+1; foreach ($rows as $key=>$value) { $r = get_array($value['name']); //调用函数,传入参数,继续查询下级 $arr[0]['children'][$key]['name']= $value['username']; //组合数组 if(is_array($r)){ $arr[0]['children'][$key]['children']= $r[0]['children']; } $i++; } return $arr; } $list = get_array("1000",1); //调用函数1000是顶级ID echo 'var data='.json_encode($list);
Dies ist das Ausgabe-Array und dann an JSON übertragen
Beispiel:
Tabellenstruktur: Das ID-Feld ist die Klassifizierungskennung. Das Namensfeld ist der Klassifizierungsname, das Feld „Vater_ID“ ist die ID der übergeordneten Kategorie, zu der es gehört, das Feld „Pfad“ ist der Kategoriepfad, in dem die Sammlung der Vorfahren der Kategorie gespeichert wird, und „isdir“ bestimmt, ob es sich um ein Verzeichnis handelt, was 1 bedeutet Ja, 0 bedeutet Nein.
Anzeigefunktion: strong>
//$count为分类等级 sort_list($str,$fatherid,$count) { $rs = $this->sql->re_datas("select * from sort where father_id = fatherid"); $num = $this->sql->sql_numrows(); $i=0; $n = 1; while(isset($rs[$i])) { $name = ""; for($n = 1 ; $n < $count ; $n ) { $name.="│ "; } if($i 1==$num) { $name.="└─".$rs[$i][name]; } else { $name.="├─".$rs[$i][name]; } if($rs[$i][isdir]) { $str.="<span style='color:#CCCCCC'>".$name."</span>"; } else { $str.=$name"; } $temp = $count 1; $str = $this->sort_list($str,$rs[$i][id],$temp); $i ; } return $str; }
Das $this->sql-Objekt ist das SQL-Operationsklassenobjekt, die Funktion re_datas() gibt die abgefragten Daten zurück Array und die Funktion sql_numrows() gibt die abgefragte Nummer zurück.
Aufrufende Methode:
$sort_list = sort_list($sort_list,0,1);
Beispiel:
Tabelle:Kategorie
id int Primärschlüssel, automatische Inkrementierung
Name varchar Kategoriename
pid int Elternklassen-ID, Standard 0
Die Standard-PID der obersten Kategorie ist 0. Wenn wir den Unterkategoriebaum einer bestimmten Kategorie herausnehmen möchten, ist die Grundidee die Rekursion. Aus Effizienzgründen wird natürlich nicht empfohlen, die Datenbank jedes Mal abzufragen, wenn sie rekursiv ist Speichern Sie sie zunächst in einem PHP-Array und verarbeiten Sie sie dann. Schließlich können die Ergebnisse zwischengespeichert werden, um die Effizienz der nächsten Anfrage zu verbessern.
Zuerst erstellen wir ein Original-Array, das direkt aus der Datenbank abgerufen werden kann :
$categories = array( array('id'=>1,'name'=>'电脑','pid'=>0), array('id'=>2,'name'=>'手机','pid'=>0), array('id'=>3,'name'=>'笔记本','pid'=>1), array('id'=>4,'name'=>'台式机','pid'=>1), array('id'=>5,'name'=>'智能机','pid'=>2), array('id'=>6,'name'=>'功能机','pid'=>2), array('id'=>7,'name'=>'超级本','pid'=>3), array('id'=>8,'name'=>'游戏本','pid'=>3), );
Das Ziel besteht darin, es in die folgende Struktur umzuwandeln:
电脑 —笔记本 ——-超级本 ——-游戏本 —台式机 手机 —智能机 —功能机
Wenn es durch ein Array dargestellt wird, kann ein untergeordneter Schlüssel hinzugefügt werden, um seine Unterkategorien zu speichern:
array( //1对应id,方便直接读取 1 => array( 'id'=>1, 'name'=>'电脑', 'pid'=>0, children=>array( &array( 'id'=>3, 'name'=>'笔记本', 'pid'=>1, 'children'=>array( //此处省略 ) ), &array( 'id'=>4, 'name'=>'台式机', 'pid'=>1, 'children'=>array( //此处省略 ) ), ) ), //其他分类省略 )
Verarbeitung:
$tree = array(); //第一步,将分类id作为数组key,并创建children单元 foreach($categories as $category){ $tree[$category['id']] = $category; $tree[$category['id']]['children'] = array(); } //第二部,利用引用,将每个分类添加到父类children数组中,这样一次遍历即可形成树形结构。 foreach ($tree as $k=>$item) { if ($item['pid'] != 0) { $tree[$item['pid']]['children'][] = &$tree[$k]; } }
print_r($tree); Das Druckergebnis ist wie folgt:
Array ( [1] => Array ( [id] => 1 [name] => 电脑 [pid] => 0 [children] => Array ( [0] => Array ( [id] => 3 [name] => 笔记本 [pid] => 1 [children] => Array ( [0] => Array ( [id] => 7 [name] => 超级本 [pid] => 3 [children] => Array ( ) ) [1] => Array ( [id] => 8 [name] => 游戏本 [pid] => 3 [children] => Array ( ) ) ) ) [1] => Array ( [id] => 4 [name] => 台式机 [pid] => 1 [children] => Array ( ) ) ) ) [2] => Array ( [id] => 2 [name] => 手机 [pid] => 0 [children] => Array ( [0] => Array ( [id] => 5 [name] => 智能机 [pid] => 2 [children] => Array ( ) ) [1] => Array ( [id] => 6 [name] => 功能机 [pid] => 2 [children] => Array ( ) ) ) ) [3] => Array ( [id] => 3 [name] => 笔记本 [pid] => 1 [children] => Array ( [0] => Array ( [id] => 7 [name] => 超级本 [pid] => 3 [children] => Array ( ) ) [1] => Array ( [id] => 8 [name] => 游戏本 [pid] => 3 [children] => Array ( ) ) ) ) [4] => Array ( [id] => 4 [name] => 台式机 [pid] => 1 [children] => Array ( ) ) [5] => Array ( [id] => 5 [name] => 智能机 [pid] => 2 [children] => Array ( ) ) [6] => Array ( [id] => 6 [name] => 功能机 [pid] => 2 [children] => Array ( ) ) [7] => Array ( [id] => 7 [name] => 超级本 [pid] => 3 [children] => Array ( ) ) [8] => Array ( [id] => 8 [name] => 游戏本 [pid] => 3 [children] => Array ( ) ) )
Vorteile : Die Beziehung ist klar und die Beziehung zwischen Vorgesetzten und Untergebenen lässt sich leicht ändern.
Nachteile
stark> span>: Verwenden Sie PHP zur Verarbeitung. Wenn die Anzahl der Kategorien sehr groß ist, wird die Effizienz verringert.Verwandte Empfehlungen: Programmiervideokurs
Das obige ist der detaillierte Inhalt vonBeispiel einer PHP+MySQL-Abfrage, um eine unbegrenzte Ausgabe eines Klassifizierungsbaums auf niedrigerer Ebene zu erreichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!