Heim  >  Artikel  >  Backend-Entwicklung  >  Rekursive Implementierung der unendlichen Klassifizierung in PHP

Rekursive Implementierung der unendlichen Klassifizierung in PHP

王林
王林Original
2023-05-07 11:32:072613Durchsuche

In der Webentwicklung ist die Klassifizierung eine sehr häufige Funktion. Und die unendliche Klassifizierung besteht, wie der Name schon sagt, darin, nach der unendlichen Ebene zu klassifizieren. Im Interaktionsprozess zwischen Front- und Back-End müssen bestimmte Methoden verwendet werden, um diese Klassifizierung zu erreichen, und die Rekursion von PHP ist eine davon.

1. Was ist Rekursion? Unter Rekursion versteht man eine Technik, bei der man sich während der Ausführung des Programms selbst aufruft. Durch Rekursion können komplexe Probleme in einfache vereinfacht und so das Problem besser gelöst werden. Um die Rekursion in PHP zu verwenden, müssen Sie zwei Elemente der Rekursion klären: die rekursive Endbedingung und den rekursiven Ausdruck.

Die Rekursionsendbedingung bezieht sich auf die Beurteilungsbedingung für das Ende der Rekursion, die sich normalerweise auf das Erreichen einer bestimmten Tiefe, eines bestimmten Zustands oder eines bestimmten Werts bezieht. Wenn während des rekursiven Prozesses keine Endbedingung vorliegt, gerät das Programm in eine Endlosschleife.

Rekursiver Ausdruck bezieht sich auf die weitere Ausführung rekursiver Operationen während des rekursiven Prozesses. Normalerweise werden rekursive Ausdrücke innerhalb rekursiver Funktionen implementiert, indem die Funktionen selbst aufgerufen werden.

2. So verwenden Sie die Rekursion, um eine unendliche Klassifizierung zu implementieren.

Wir können die Rekursion verwenden, um eine unendliche Klassifizierung zu implementieren. Insbesondere können wir eine rekursive Funktion definieren, die einen Parameter empfängt, bei dem es sich um ein Array handelt, das eine Klassifizierungsliste auf einer bestimmten Ebene darstellt. Rekursive Operationen werden innerhalb der Funktion ausgeführt und jede Kategorie wird der Reihe nach durchlaufen. Wenn diese Kategorie Unterkategorien hat, werden die Unterkategorien von der rekursiven Funktion durchlaufen. Am Ende des Durchlaufs wird das gesamte kategoriale Array zurückgegeben.

Die spezifische Implementierung ist wie folgt:

function infiniteCategory($data, $pid = 0, $level = 0)
{
    static $result = array();
    foreach ($data as $key => $value) {
        if ($value['parent_id'] == $pid) {
            $value['level'] = $level;
            $result[] = $value;
            infiniteCategory($data, $value['id'], $level + 1);
        }
    }
    return $result;
}

Die Analyse ist wie folgt:

(1) Diese Funktion empfängt drei Parameter, einer ist das Klassifizierungslistenarray $data, einer ist $pid, dessen übergeordnete ID standardmäßig 0 ist, und Das andere ist die Ebene, die standardmäßig auf 0 $level eingestellt ist.

(2) Definieren Sie eine statische Variable, um das endgültige Klassifizierungsergebnis zu speichern.

(3) Durchlaufen Sie die Kategorieliste durch eine foreach-Schleife. Wenn die parent_id einer Kategorie gleich $pid ist, bedeutet dies, dass diese Kategorie zur aktuellen Ebene gehört und dem endgültigen Ergebnisarray $result hinzugefügt wird.

(4) Rufen Sie dann die rekursive Funktion auf und übergeben Sie die ID der aktuellen Kategorie als $pid und $level+1 als Ebene der nächsten Klassifizierungsebene.

(5) Geben Sie nach Abschluss der Durchquerung das Ergebnisarray zurück.

Testen wir es jetzt:

$data = array(
    array('id' => 1, 'name' => '电脑', 'parent_id' => 0),
    array('id' => 2, 'name' => '手机', 'parent_id' => 0),
    array('id' => 3, 'name' => '笔记本', 'parent_id' => 1),
    array('id' => 4, 'name' => '台式机', 'parent_id' => 1),
    array('id' => 5, 'name' => '智能手机', 'parent_id' => 2),
    array('id' => 6, 'name' => '非智能手机', 'parent_id' => 2),
    array('id' => 7, 'name' => '微型笔记本', 'parent_id' => 3),
    array('id' => 8, 'name' => '超级台式机', 'parent_id' => 4),
    array('id' => 9, 'name' => '小型台式机', 'parent_id' => 4),
);

var_dump(infiniteCategory($data));

Die laufenden Ergebnisse sind wie folgt:

array(9) {
  [0]=>
  array(4) {
    ["id"]=>
    int(1)
    ["name"]=>
    string(6) "电脑"
    ["parent_id"]=>
    int(0)
    ["level"]=>
    int(0)
  }
  [1]=>
  array(4) {
    ["id"]=>
    int(3)
    ["name"]=>
    string(9) "笔记本"
    ["parent_id"]=>
    int(1)
    ["level"]=>
    int(1)
  }
  [2]=>
  array(4) {
    ["id"]=>
    int(7)
    ["name"]=>
    string(15) "微型笔记本"
    ["parent_id"]=>
    int(3)
    ["level"]=>
    int(2)
  }
  [3]=>
  array(4) {
    ["id"]=>
    int(4)
    ["name"]=>
    string(9) "台式机"
    ["parent_id"]=>
    int(1)
    ["level"]=>
    int(1)
  }
  [4]=>
  array(4) {
    ["id"]=>
    int(9)
    ["name"]=>
    string(18) "小型台式机"
    ["parent_id"]=>
    int(4)
    ["level"]=>
    int(2)
  }
  [5]=>
  array(4) {
    ["id"]=>
    int(8)
    ["name"]=>
    string(18) "超级台式机"
    ["parent_id"]=>
    int(4)
    ["level"]=>
    int(2)
  }
  [6]=>
  array(4) {
    ["id"]=>
    int(2)
    ["name"]=>
    string(6) "手机"
    ["parent_id"]=>
    int(0)
    ["level"]=>
    int(0)
  }
  [7]=>
  array(4) {
    ["id"]=>
    int(5)
    ["name"]=>
    string(12) "智能手机"
    ["parent_id"]=>
    int(2)
    ["level"]=>
    int(1)
  }
  [8]=>
  array(4) {
    ["id"]=>
    int(6)
    ["name"]=>
    string(15) "非智能手机"
    ["parent_id"]=>
    int(2)
    ["level"]=>
    int(1)
  }
}

Sie können sehen, dass die Kategorieliste erfolgreich in die Infinitus-Kategorie konvertiert wurde. Sie können die Ebene von sehen jede Kategorie.

3. Zusammenfassung

Die Methode zur Implementierung der Infinitus-Klassifizierung durch Rekursion ermöglicht es uns, die Klassifizierungsfunktion in der Webentwicklung schnell abzuschließen und bietet eine hohe Flexibilität. Bei der Verwendung der Rekursion müssen Sie auf die Einstellung der Endbedingung achten, da Sie sonst möglicherweise in eine Endlosschleife geraten.

Das obige ist der detaillierte Inhalt vonRekursive Implementierung der unendlichen Klassifizierung in PHP. 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