Heim  >  Artikel  >  Backend-Entwicklung  >  PHP realisiert eine unendliche Menüklassifizierung

PHP realisiert eine unendliche Menüklassifizierung

肚皮会动
肚皮会动Original
2017-11-14 15:03:393912Durchsuche

Dieser Artikel stellt detailliert die Verwendung von PHP zum Implementieren von Menüs vorInfinitus-KlassifizierungAllgemeine Projektmenüs werden je nach Benutzer und unterschiedlicher Rollenanmeldung unterschiedlich angezeigt verwenden, wenn Es scheint umständlich, nach anderen Kriterien zu urteilen, und es ist sehr mühsam, das Menü zu ändern. Der beste Weg besteht darin, das Menü in der Datenbank zu speichern, es dann aus der Datenbank abzurufen, zu durchlaufen und auf der Seite anzuzeigen. Der Zweck dieses Artikels besteht darin, die Daten abzufragen und die obere und untere Ebene des Menüs nacheinander abzugleichen. Es wird die Technologie der unendlichen Klassifizierung verwendet.

Menüdaten

Unsere Menüdaten sind hier temporäre Daten und werden nicht aus der Datenbank abgefragt und verarbeitet. Die Daten ähneln im Wesentlichen denen in der Datenbank :

$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' => 3, 'name' => '长丰县'),
            6 => array('id' => 6, 'pid' => 4, 'name' => '小溪村'),
            5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),
        );

Die Daten hier werden auch in die realen Daten geändert, die aus der Datenbank abgefragt werden.

Erstellen Sie eine Menü-Infinitus-Klassifizierungsmethode

   function generateTree($list, $pk = 'id', $pid = 'pid', $child = '_child', $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;
}

Analysecode Der Code oben: Wichtiger ist die Stelle, an der sich der Kommentar im Code befindet, Punkt 1, Punkt 2.
Zuerst das Array durchlaufen
2 1 bedeutet, festzustellen, ob das Root-Menü vorhanden ist. Wenn ja, weisen Sie das Root-Menü-Array zu und weisen Sie die Referenz des Arrays dem neuen Array zu.
4 Punkt 2 bedeutet, dass das Unterklassen-Array dem Array mit dem Schlüssel $child zugewiesen wird im übergeordneten Klassenarray
5. Das Endergebnis ist ein Array mit einer Baumstruktur

Das Ergebnis ist wie folgt:

Array ( 
[0] => Array ( [id] => 1 [pid] => 0 [name] => 安徽省 [son] => Array ( [0] => Array ( [id] => 3 [pid] => 1 [name] => 合肥市 [son] => Array ( [0] => Array ( [id] => 4 [pid] => 3 [name] => 长丰县 [son] => Array ( [0] => Array ( [id] => 6 [pid] => 4 [name] => 小溪村 ) ) ) ) ) 
[1] => Array ( [id] => 5 [pid] => 1 [name] => 安庆市 ) ) )
 [1] => Array ( [id] => 2 [pid] => 0 [name] => 浙江省 ) )

gibt das Ergebnis an das Frontend zurück. plus das HTML-Element des Menüs Der Effekt kommt heraus

Zusammenfassung

1 Die Schwierigkeit bei der Verwendung von PHP für Infinitus ist &. aber die Zuweisung einer Referenz zu einem Array, damit derselbe Inhalt bearbeitet werden kann
2. Die Referenzzuweisung wird im Allgemeinen in Arrays, Objekten, wie z. B. php $arr=&$arr1, verwendet. $CustomerTwo=&$Customer öffnet keine neuen Daten im Speicher, sondern übergibt den Verweis auf die Daten im Speicher an die neue Variable
3. Die Verwendung dieser Methode ist viel besser als die Verwendung der Rekursion ist einfacher zu bedienen.
4. Diese Methode ist nicht die beste. Einige Methoden verursachen Probleme, nachdem sie verwendet wurden:

function generateTree($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' => 3, 'name' => '长丰县'),
    7 => array('id' => 6, 'pid' => 4, 'name' => '小溪村'),
    5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),
);

Diese Methode kann tatsächlich den Effekt erzielen, und zwar nur, wenn eine Schleife sehr effizient zu sein scheint, aber sie hat ein größtes Problem, nämlich, dass der ID-Wert mit dem entsprechenden Schlüsselwert übereinstimmen muss Ich verstehe, dass Sie es selbst testen können. Ich hoffe, es wird Ihnen hilfreich sein.

Verwandte Empfehlungen:

Entwicklungsprozess und Beispielcode für die rekursive PHP-Implementierung der Klassifizierung auf unendlicher Ebene

Beispiel für eine PHP-Klassifizierung auf unendlicher Ebene Code

Drei Möglichkeiten, eine unendliche Klassifizierung in PHP zu erreichen

Analyse von Methoden, um eine unendliche Klassifizierung in PHP zu erreichen

Das obige ist der detaillierte Inhalt vonPHP realisiert eine unendliche Menüklassifizierung. 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