이 글은 주로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!