> 백엔드 개발 > PHP 튜토리얼 > PHP 무한 분류 쿼리의 효율성을 높이는 방법(배열 및 재귀 사용)

PHP 무한 분류 쿼리의 효율성을 높이는 방법(배열 및 재귀 사용)

PHP中文网
풀어 주다: 2023-02-28 20:48:02
원래의
1284명이 탐색했습니다.

php무한 분류쿼리의 효율성을 높이는 방법(배열재귀)

<?php
class Tree {
    /**
     * 从数据库查询出的所有分类信息
     * @var array
     * by:bbs.it-home.org
     */
    var $arr;
    /**
     * 如下格式
     * var $arr = array(
     1 => array(‘id’=>’1′,’parentid’=>0,’name’=>’一级栏目一’),
     2 => array(‘id’=>’2′,’parentid’=>0,’name’=>’一级栏目二’),
     3 => array(‘id’=>’3′,’parentid’=>1,’name’=>’二级栏目一’),
     );*/
    /**
     * 输出结构
     * @var array
     */
    var $tree = array();
    /**
     * 树形递归的深度
     * @var int
     */
    var $deep = 1;
    /**
     * 生成树形的修饰符号
     * @var array
     */
    var $icon = array(&#39;│&#39;,&#39;├&#39;,&#39;└&#39;);
    /**
     * 生成指定id的下级树形结构
     * @param int $rootid 要获取树形结构的id
     * @param string $add 递归中使用的前缀
     * @param bool $parent_end 标识上级分类是否是最后一个
     */
    function getTree($rootid = 0,$add = "",$parent_end =true){
        $is_top = 1;
        $child_arr = $this->getChild($rootid);
        if(is_array($child_arr)){
            $cnt = count($child_arr);
            foreach($child_arr as $key => $child){
                $cid = $child[&#39;id&#39;];
                $child_child = $this->getChild($cid);
                if($this->deep >1){
                    if($is_top == 1 && $this->deep > 1){
                        $space = $this->icon[1];
                        if(!$parent_end)
                        $add .= $this->icon[0];
                        else $add .= "";
                    }
                    if($is_top == $cnt){
                        $space = $this->icon[2];
                        $parent_end = true;
                    }else {
                        $space = $this->icon[1];
                        $parent_end = false;
                    }
                }
                $this->tree[] = array(‘spacer’=>$add.$k.$space,
                ‘name’=>$child[&#39;name&#39;],
                ‘id’=>$cid
                );
                $is_top++;
                $this->deep++;
                if($this->getChild($cid))
                $this->getTree($cid,$add,$parent_end);
                $this->deep–;
            }
        }
        return $this->tree;
    }
    /**
     * 获取下级分类数组
     * @param int $root
     */
    function getChild($root = 0){
        $a = $child = array();
        foreach($this->arr as $id=>$a){
            if($a[&#39;parentid&#39;] == $root){
                $child[$a[&#39;id&#39;]] = $a;
            }
        }
        return $child?$child:false;
    }
    /**
     * 设置源数组
     * @param $arr
     */
    function setArr($arr = array()){
        $this->arr = $arr;
    }
}
?>
로그인 후 복사
질의를 통해 구조를 배열에 저장한 후 배열에 대해 재귀 연산을 수행하면 프로그램의 효율성이 크게 향상됩니다. 코드의 사용은 매우 간단합니다. 쿼리 구조, setArr을 얻은 후 getTree를 직접 호출하면 프로그램 정렬 번호에 따라 접두사 수정 및 기타 정보가 포함된 배열을 얻을 수 있습니다. foreach 배열을 통해 다음과 같은 트리 모양 목록을 얻을 수 있습니다. Fruit ├ Banana ├ Apple │ ├ Red Fuji │ └ Hainan Apple └ Peach 기억하세요: 웹 사이트 개발 과정에서 대부분의 병목 현상은

가 아닌 데이터베이스에 있습니다. PHP 코드 .

위 내용은 PHP에서 무제한 분류 쿼리의 효율성을 높이는 방법입니다(배열 및 재귀 사용). 자세한 관련 내용은 PHP 중국어 웹사이트(m.sbmmt.com)를 참고하세요!


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿