Heim  >  Artikel  >  Backend-Entwicklung  >  Was bedeutet die PHP-Infinitus-Klassifizierung?

Was bedeutet die PHP-Infinitus-Klassifizierung?

(*-*)浩
(*-*)浩Original
2019-09-16 14:18:423547Durchsuche

PHP Infinitus-Klassifizierung bedeutet einfach, dass eine Kategorie in mehrere Unterkategorien unterteilt werden kann und dann eine Unterkategorie in mehrere andere Unterkategorien usw. auf unbestimmte Zeit unterteilt werden kann, genau wie Windows einen neuen Ordner erstellen kann und dann in Sie Sie können einige Ordner in diesem Ordner erstellen, und Sie können auch einige Ordner unter dem Ordner

Was bedeutet die PHP-Infinitus-Klassifizierung?

Datenbankspeicher

erstellen

Die Infinitus-Klassifizierung ist eigentlich ein Baum, bei dem alle Knoten ein Speicherelement bilden. Jeder Knoten kann beliebig viele untergeordnete Knoten und nur einen übergeordneten Knoten haben.

MySQL-Datenspeicherung in Kombination mit der Datentabellenspeicherstruktur des Projekts lautet wie folgt: (Empfohlenes Lernen: PHP-Programmierung vom Einstieg bis zur Beherrschung)

CREATE TABLE t_tree_info (  `Fid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '标签自增ID',    `Fname` 
varchar(255)  NOT NULL DEFAULT '' COMMENT '节点名称',    `Fpid` bigint(20) unsigned NOT NULL DEFAULT 0  
COMMENT '父节点id',    `Fadd_time` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'  COMMENT '创建时间',  
`Fmodify_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`Fid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='无限极分类菜单存储表';

Das Kernfeld ist die eindeutige Kennung des Knotens selbst Fid und die entsprechende Kennung des übergeordneten Knotens Fpid.

Technische Implementierung

Globaler Datenspeicherknoten

Die Knotendaten werden in MySQL im Projekt gespeichert. Zum Testen werden nun die MySQL-Daten gespeichert direkt im Array wird es global verwendet. Die Datenspeicherung ist wie folgt:

private static $listData = [
    [
        "Fid" => 1,
        "Fpid" => 8,
        "Fname" => '首页',
    ],
    [
        "Fid" => 2,
        "Fpid" => 8,
        "Fname" => '博客',
    ],
    [
        "Fid" => 3,
        "Fpid" => 8,
        "Fname" => '官网',
    ],
    [
        "Fid" => 4,
        "Fpid" => 2,
        "Fname" => '个人博客',
    ],
    [
        "Fid" => 5,
        "Fpid" => 2,
        "Fname" => '他人博客',
    ],
    [
        "Fid" => 6,
        "Fpid" => 8,
        "Fname" => '测试1',
    ],
    [
        "Fid" => 7,
        "Fpid" => 8,
        "Fname" => '测试2',
    ],
    [
        "Fid" => 8,
        "Fpid" => 0,
        "Fname" => '无限极分类',
    ],
    [
        "Fid" => 9,
        "Fpid" => 5,
        "Fname" => '女性栏目',
    ],
    [
        "Fid" => 10,
        "Fpid" => 5,
        "Fname" => '男性栏目',
    ],
];

Referenzmethode zur Erzielung einer unendlichen Klassifizierung

Idee:

1. alle ausstehenden Die Daten werden in ein Array gepackt, das mit dem Primärschlüssel Fid (pk) indiziert ist, sodass Fpid verwendet werden kann, um die entsprechende übergeordnete Spalte abzurufen.

2. Wenn es sich um den Stammknoten handelt, 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.

Ich persönlich finde, dass die zitierten Designideen leichter verständlich und intuitiver sind als die rekursiven Ideen.

Der Code lautet wie folgt:

/**
 * 把返回的数据集转换成Tree
 * @param array $list 要转换的数据集
 * @param string $pk 自增字段(栏目Fid)
 * @param string $pid parent标记字段
 * @return array
 */
public static function quote_make_tree($list, $pk = 'Fid', $pid = 'Fpid',$child = '_child', $root = 0)
{
    $tree = $packData = [];
    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;
}

Referenzaufrufbaum:

/**
 * 引用生成树
 * @return
 */
public static function quote_tree_test()
{
    $tree = self::make_tree(self::$listData, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0);
    echo json_encode($tree);
}

Das Rückgabeergebnis ist wie folgt folgt:

[
    {
        "Fid": 8,
        "Fpid": 0,
        "Fname": "无限极分类",
        "_child": [
            {
                "Fid": 1,
                "Fpid": 8,
                "Fname": "首页"
            },
            {
                "Fid": 2,
                "Fpid": 8,
                "Fname": "博客",
                "_child": [
                    {
                        "Fid": 4,
                        "Fpid": 2,
                        "Fname": "个人博客"
                    },
                    {
                        "Fid": 5,
                        "Fpid": 2,
                        "Fname": "他人博客",
                        "_child": [
                            {
                                "Fid": 9,
                                "Fpid": 5,
                                "Fname": "女性栏目"
                            },
                            {
                                "Fid": 10,
                                "Fpid": 5,
                                "Fname": "男性栏目"
                            }
                        ]
                    }
                ]
            },
            {
                "Fid": 3,
                "Fpid": 8,
                "Fname": "官网"
            },
            {
                "Fid": 6,
                "Fpid": 8,
                "Fname": "测试1"
            },
            {
                "Fid": 7,
                "Fpid": 8,
                "Fname": "测试2"
            }
        ]
    }
]

Das obige ist der detaillierte Inhalt vonWas bedeutet die PHP-Infinitus-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