Maison  >  Questions et réponses  >  le corps du texte

php - 无限级分类问题

无限级分类 我现在知道最底部节点 也就是知道

用一个方法找出所有的父节点!谢谢

黄舟黄舟2750 Il y a quelques jours509

répondre à tous(2)je répondrai

  • PHP中文网

    PHP中文网2017-04-10 14:42:42

    1. 如果你问的是如何用一句 SQL 语句来找出所有的父节点的话,join 可能可以实现,但是不建议用数据库实现。一是尽量减小粒度(虽然实践表明绝大多数的减小粒度都是无用功),使其便于修改;二是这样会给数据库造成较大压力,使流程处理时间大幅增加,数据库不擅长逻辑处理,更擅长简单的取。

    2. 如果你问的是如何在一个方法中取出,高级语言有一个普遍的语法特性,叫 递归,说白了就是自己调用自己。
      我们来构思一下实现方式(php语言为例):

    $father = "";
    
    public function get_all_father($son_of_son) {
    
        global $father;
        if (找他爹($son_of_son)) {
    
            $他爹 = 找他爹($son_of_son);
            $father = $father.'.'.$他爹; //以 . 隔开一层一层的father
            get_all_father($他爹);
        }
    
        return $father.'.'.$son_of_son;
    }
    
    public function 找他爹($儿子) {
    
        if (在数据库里找到($儿子)的爹了) {
            return 他爹;
        } else {
            return FALSE;
        }
    }
    
    //特别声明,除了那一句 “在数据库里找到($儿子)的爹了” 和 “return 他爹;” 是我简写了以外,其他代码都是可以运行的,没错,汉字也行,以utf-8编码保存就行。
    

    这只是一个思路,离实际能在symfony里运行的代码还有很大差距。当然这是在两个function里实现的,你可以把下面那个function缩成一行放在上面的里面......

    répondre
    0
  • 巴扎黑

    巴扎黑2017-04-10 14:42:42

    按存储结构不同,这个要看你的表格结构,不能靠猜的。

    常见的有,链表式的必须递归回溯,左右值式的所有超集并按左值排序。

    répondre
    0
  • Annulerrépondre