>백엔드 개발 >PHP 튜토리얼 >PHP 재귀 알고리즘에 대한 자세한 설명

PHP 재귀 알고리즘에 대한 자세한 설명

墨辰丷
墨辰丷원래의
2018-05-16 11:53:345419검색

이 글은 주로 PHP 재귀 알고리즘에 대한 자세한 설명을 소개합니다. 관심 있는 친구들이 참고하면 도움이 될 것입니다.

트리 노드용으로 설계해야 하는 데이터베이스 구조, 읽어야 하는 트리 노드 데이터 구조를 만났을 때! 모든 사람이 트리 구조를 얻기 위해 데이터베이스 쿼리를 사용하도록 선택합니까?

//曾经的数据库查询获取方式$res = $this->db->query("select * from menu where pid = 0");foreach($res as 
$k=>$v){     $res[$k]['child'] = $this->db->query("select * from menu where pid =".$v['id']);
}

//결과 가져오기 $res;
참고: 이 방법은 실제로 가능하다고 말해야 하지만, 데이터베이스에서 실행 중인 쿼리의 수와 수준 수를 수정해야 한다는 단점이 있습니다.
데이터베이스의 쿼리 소비를 무시하지 마세요. 데이터가 작아도 상관없지만, 데이터의 양이 많습니다. 이 실현 가능한 방법은 시스템에 큰 부담을 가져올 것입니다!
따라서 모든 사람은 진실을 이해해야 합니다. 때로는 데이터베이스 작업이 PHP 프로그램 알고리즘보다 더 유익할 때도 있고, 때로는 그 반대가 사실일 때도 있습니다!
이 기본 트리 노드의 경우 알고리즘을 사용하는 것이 가장 좋습니다.

PHP 코드 알고리즘 (CI 프레임워크 구현 : 광고 아님!)

  public function getMenus(){
    //查询
    $res = $this->db->get('menu')->result_array();    $res = $this->getChild($res);
    print_r($res);
}/**
 * 递归 树节点算法
 * @param array $array
 * @param number $pid
 */private function getChild($array,$pid = 0){
    $data = array();    foreach ($array as $k=>$v){        //PID符合条件的
        if($v['pid'] == $pid){            //寻找子集
            $child = $this->getChild($array,$v['id']);            //加入数组
            $v['child'] = $child?:array(); 
            $data[] = $v;//加入数组中
        }
    }    return $data;
}

//이것의 장점은 계산 속도가 빠르고 소모량이 적으며 레벨이 가변적이라는 것입니다. 즉, 데이터베이스에 아무리 많은 레벨이 기록되어도 이 알고리즘을 얻을 수 있습니다. 결과:

Array(

[0] => Array

    (

        [id] => 1
        [title] => PHP中文网
        [pid] => 0
        [sort] => 0
        [child] => Array
            (
            )

)
[1] => Array
    (
        [id] => 2
        [title] => 系统设置
        [pid] => 0
        [sort] => 99
        [child] => Array
            (
                [0] => Array
                    (
                        [id] => 4
                        [title] => 权限管理
                        [pid] => 2
                        [sort] => 2
                        [child] => Array
                            (
                            )

                    )

                [1] => Array
                    (
                        [id] => 5
                        [title] => 菜单栏目
                        [pid] => 2
                        [sort] => 0
                        [child] => Array
                            (
                            )

                    )

                [2] => Array
                    (
                        [id] => 3
                        [title] => 管理员
                        [pid] => 2
                        [sort] => 99
                        [child] => Array
                            (
                            )

                    )

            )

    )
)

관련 권장 사항:


재귀 알고리즘을 기반으로 Python으로 구현된 하노이 탑과 피보나치 수열

Tower PHP의 하노이 문제 재귀 알고리즘 구현 및 반복 알고리즘 구현

PHP의 재귀 알고리즘 구현 및 반복 알고리즘 구현 하노이 문제 타워

위 내용은 PHP 재귀 알고리즘에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.