recherche

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

php - Comment réaliser une sortie d'affichage de classification à trois niveaux?

数据库文件xd_item:
id    pid     item         lead     ...
1       0     标题名称一  
2       0     标题名称二
3       1     中标题名称1-1
4       1     中标题名称1-2
5       2     中标题名称2-1
6       2     中标题名称2-2
8       3     小标题名称1-1-1
9       6     小标题名称2-2-1
10      6     小标题名称2-2-2
11      2     中标题名称2-3

---------------------
输出效果:
序号     项目名称
1       标题名称一      
1.1     中标题名称1-1
1.1.1   小标题名称1-1-1
1.2     中标题名称1-2
2       标题名称二
2.1     中标题名称2-1
2.2     中标题名称2-2
2.2.1   小标题名称2-2-1
2.2.2   小标题名称2-2-2
2.3     中标题名称2-3
============================
要在PHP实现这个输出效果,要怎么实现呢? 
習慣沉默習慣沉默2818 Il y a quelques jours896

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

  • ringa_lee

    ringa_lee2017-05-17 09:57:55

    Interrogez d'abord ceux dont le pid est 0, parcourez ceux dont le pid est 0, interrogez ceux dont le pid est l'ID de ces éléments, puis affichez en boucle

    répondre
    0
  • PHP中文网

    PHP中文网2017-05-17 09:57:55

    S'il s'agit d'Oracle, vous pouvez utiliser les fonctions level() et sys_connect_by_path() pour l'implémenter.
    Si vous n'utilisez pas de fonctions, vous pouvez créer une vue pour l'implémenter.

    répondre
    0
  • 迷茫

    迷茫2017-05-17 09:57:55

    Ceci est une référence à ma méthode, qui utilise la récursion pour parcourir. Tant qu'elle traite des structures de données, il existe des méthodes, cela dépend simplement de l'efficacité

    .
    static public function toLevel($cate, $delimiter = '|——', $parent_id = 0, $level = 0) {
    
        $arr = array();
        foreach ($cate as $v) {
            if ($v['parent_id'] == $parent_id) {
                $v['type'] = $level + 1;
                $v['delimiter'] = str_repeat($delimiter, $level);
                $arr[] = $v;
                $arr = array_merge($arr, self::toLevel($cate, $delimiter, $v['cate_id'], $v['type']));
            }
        }
    
        return $arr;
    
    }

    répondre
    0
  • phpcn_u1582

    phpcn_u15822017-05-17 09:57:55

    Interrogez les données à l'aide d'appels de fonction. Le premier répond parfaitement à vos besoins et le second est le stockage récursif des données

    .
    $arr = [
        0=>['id'=>1,'pid'=>0,'title'=>'标题名称一'],
        1=>['id'=>2,'pid'=>0,'title'=>'标题名称一'],
        2=>['id'=>3,'pid'=>1,'title'=>'标题名称一'],
         3=>['id'=>4,'pid'=>1,'title'=>'标题名称一'],
        4=>['id'=>5,'pid'=>2,'title'=>'标题名称一'],
        5=>['id'=>6,'pid'=>2,'title'=>'标题名称一'],
        6=>['id'=>7,'pid'=>3,'title'=>'标题名称一'],
        7=>['id'=>8,'pid'=>3,'title'=>'标题名称一'],
        8=>['id'=>9,'pid'=>6,'title'=>'标题名称一'],
        9=>['id'=>10,'pid'=>6,'title'=>'标题名称一'],
        10=>['id'=>11,'pid'=>2,'title'=>'标题名称一'],
    ];
    $result = foreachd($arr,0);var_dump($result);
    function foreachd($arr,$pid,$showpage = '') {
        $setpage = 1;
        $result = array();
        foreach($arr as $key=>$val) {
            if($val['pid'] == $pid) {
                $setshowpage = $showpage == '' ? $setpage : $showpage.'.'.$setpage;
                $arr[$key]['page'] = $setshowpage;
                $setpage++;
                $setarray = ['page'=>$setshowpage,'title'=>$val['title']];
                $result[] = $setarray;
                $result = array_merge($result,foreachd($arr,$val['id'],$setshowpage));
                
            }
        }
        return $result;
    }
    /*function foreachd($arr,$pid) {
        $return = array();
        foreach($arr as $val) {
            if($val['pid'] == $pid) {
                $return[$val['id']]['title'] = $val['title'];
                $childrendata = foreachd($arr,$val['id']);
                if($childrendata) {
                    $return[$val['id']]['children'] = $childrendata;
                }
                
            }
        }
        return $return;
    }*/

    répondre
    0
  • Annulerrépondre