So implementieren Sie eine unbegrenzte Klassifizierung in PHP

迷茫
Freigeben: 2023-03-05 10:38:01
Original
3830 Leute haben es durchsucht

Die unendliche Klassifizierung ist eine Entwurfstechnik, die häufig in der Entwicklung verwendet wird. In diesem Artikel wird hauptsächlich die Implementierungsmethode der unendlichen Klassifizierung in PHP vorgestellt.

Die unendliche Klassifizierung ist eine Designtechnik, die häufig in der Entwicklung verwendet wird, beispielsweise bei Website-Verzeichnissen, Abteilungsstrukturen und Artikelklassifizierungen. Der Autor ist der Meinung, dass es eine große Rolle bei der Gestaltung der hierarchischen Struktur von Tabellen spielt. Beispielsweise auf einigen Plattformen.

Füllen Sie den Einladenden aus, es handelt sich um eine Vorgesetzten-Untergebenen-Beziehung, und die Untergebenen haben ihre eigenen Zweige. Die meisten davon werden mithilfe rekursiver Ideen implementiert. Lassen Sie uns ohne weitere Umschweife zunächst die Implementierung der Rekursion überprüfen

Rekursion (eine Programmiertechnik, bei der sich ein Programm selbst aufruft):

1. $_GLOBALS[Ergebnis]

2. statisches $ergebnis

3. Parameterreferenz &

Beispiel: Traverse 1-10

$i=0;
function deeploop( $i ){
  global $i;
  $i++;
  echo $i;
  if( $i<10 ){
    deeploop($i);
  }
 
}
 
function deeploop( ){
  static $i=0;
  $i++;
  echo $i;
  if( $i<10 ){
    deeploop($i);
  }
 
}
 
 
function deeploop( &$i=0 ){
  $i++;
  echo $i;
  if( $i<10 ){
    deeploop($i);
  }
 
}
Nach dem Login kopieren

1. Implementierung der unendlichen Klassifizierung:

1. Legen Sie die Eltern-ID im Tabellendesign fest und setzen Sie die oberste Eltern-ID auf 0, um einen Stammbaum zu erstellen. Jede Kategorie muss ihre Eltern-ID aufzeichnen. (pid=0 stellt die oberste Ebene dar)

id pid catename cateorder createtime (Primärschlüssel-ID, übergeordnete ID, Kategoriename, Kategoriesortierung, Erstellungszeit)

Beispiele: Kategorieverzeichnisstruktur der Website; Kategoriestruktur der Gastronomie; Struktur der Kommentare

2. Unbegrenzte Klassifizierung des vollständigen Pfads (alle übergeordneten IDs der Reihe nach in einem Feld aufzeichnen)

ID-Pfad, Catename, Cateorder, Erstellungszeit (Primärschlüssel-ID, übergeordnete ID in durch Kommas getrennter Reihenfolge, Kategoriename, Kategoriesortierung, Erstellungszeit)

Vorteile und Nachteile:

Die vollständige Pfadabfrage ist praktisch. Darüber hinaus ist die Datenpflege beim Verschieben der Klassifizierung etwas komplizierter.

2. Beispielimplementierung (Website-Verzeichnis):

Klassifizierungstabelle:

 #父级Id递归法
  CREATE TABLE `deepcate`(
    `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `pid` int(11) NOT NULL DEFAULT 0,
    `catename` char(25) NOT NULL,
    `cateorder` int(6) ,
    `createtime` date
  )ENGINE=INNODB default CHARSET=utf8;
   
   
  //数据
  INSERT INTO `deepcate` VALUES(1,0,'图片',null,'2016-11-01'),
                ( 2,1,'美女',null,'2016-11-01'),
                ( 3,1,'新闻',null,'2016-11-01'),
                ( 4,2,'足球宝贝',null,'2016-11-01'),
                ( 5,2,'日韩明星',null,'2016-11-01'),
                ( 6,5,'美女写真',null,'2016-11-01');
                 
  #全路径
  CREATE TABLE `qljcate` (
    `id` int(11) NOT NULL,
    `path` char(255) ,
    `catename` char(25) NOT NULL,
    `cateorder` int(6),
    `createtime` date
  )ENGINE=INNODB default CHARSET=utf8;
   
  INSERT INTO `qljcate` VALUES( 1,null,'图片',null,'2016-11-01'),
                ( 2,1,'美女图片',null,'2016-11-01'),
            ( 3,1,2,'足球宝贝',null,'2016-11-01'),
                ( 4,1,2,'日韩明星',null,'2016-11-01'),
                ( 5,1,2,4,'美女写真',null,'2016-11-01');
Nach dem Login kopieren

Rufen Sie den Verzeichnispfad ab, in dem sich das Bild befindet:

#父级Id递归法
  CREATE TABLE `deepcate`(
    `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `pid` int(11) NOT NULL DEFAULT 0,
    `catename` char(25) NOT NULL,
    `cateorder` int(6) ,
    `createtime` date
  )ENGINE=INNODB default CHARSET=utf8;
   
   
  //数据
  INSERT INTO `deepcate` VALUES(1,0,'图片',null,'2016-11-01'),
                ( 2,1,'美女',null,'2016-11-01'),
                ( 3,1,'新闻',null,'2016-11-01'),
                ( 4,2,'足球宝贝',null,'2016-11-01'),
                ( 5,2,'日韩明星',null,'2016-11-01'),
                ( 6,5,'美女写真',null,'2016-11-01');
                 
  #全路径
  CREATE TABLE `qljcate` (
    `id` int(11) NOT NULL,
    `path` char(255) ,
    `catename` char(25) NOT NULL,
    `cateorder` int(6),
    `createtime` date
  )ENGINE=INNODB default CHARSET=utf8;
   
  INSERT INTO `qljcate` VALUES( 1,null,'图片',null,'2016-11-01'),
                ( 2,1,'美女图片',null,'2016-11-01'),
            ( 3,1,2,'足球宝贝',null,'2016-11-01'),
                ( 4,1,2,'日韩明星',null,'2016-11-01'),
                ( 5,1,2,4,'美女写真',null,'2016-11-01');
Nach dem Login kopieren

*Zu beachtende Punkte:

Eine mobile Kategorie kann nicht unter sich selbst verschoben werden und ihre Unterkategorien können gelöscht werden (nur die unterste Kategorie kann gelöscht werden, und Kategorien ohne Unterkategorien; mit anderen Worten, sie kann nur von der untersten Ebene gelöscht werden).

Denken Sie über alle Bildkategorien unter Bildtypen nach?​

 #pid 父级id实现法
  function GetAllcate( $id,&$result=array() ){
    $sql = "SELECT * FROM deepcate WHERE pid in ({$id})";
    $query = mysql_query( $sql );
    $row = mysql_fetch_assoc( $query );
    if( mysql_num_rows($row)>0 )
    {
      $idlist = array();
      while( $row ){
        $result[] = $row;
        $idlist[] = $row['id']; 
      }
      $id = implode(',',$idlist);
      GetAllcate( $id,$result );
     
    }
     
    $result = array_unique( $result );
    return $result;
  }
Nach dem Login kopieren

Diese Methode eignet sich besser zum Abfragen aller Bücher und Artikel unter der übergeordneten Kategorie. . . Natürlich kann der vollständige Pfad direkt abgerufen werden, daher werde ich ihn hier nicht erwähnen.

Im tatsächlichen Betrieb können wir eine angemessene Tabellenstruktur entsprechend der tatsächlichen Situation entwerfen.

Wenn beispielsweise eine Ladenkette die Produktverwaltung implementiert, haben die Kontoeinstellungen des Ladens eine Beziehung zwischen Vorgesetzten und Untergebenen. Abhängig von der Partition des Agentenpunkts können diese Untergebenen ihre eigenen Untergebenen haben, sodass diese unbegrenzte Klassifizierungsmethode verwendet werden kann Mit dieser Art von Beziehungssystem können Sie dieser Situation flexibler begegnen. Sie müssen lediglich jede Kontoebene festlegen, um die Berechtigungsverteilung für verschiedene Geschäfte festzulegen.

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!