header("Content-type:text/html;charset=utf-8")
$db=new mysqli("localhost","root","","news_php100"); //데이터베이스 연결을 인스턴스화합니다. 이를 사용하기 전에 mysqli 클래스 라이브러리가 로드되었는지 확인하거나 mysql_connect를 사용하여 연결하십시오.
if(mysqli_connect_errno()){
echo "링크 실패:".mysqli_connect_error()
종료() }
$db->query("utf8 이름 설정");
$result=$db->query("f_id=0인 클래스에서 이름 선택"); //f_id=0인 카테고리, 즉 각 주요 카테고리를 찾습니다.
while($row=$result->fetch_assoc()){
echo $row['name']."
"; //각 주요 카테고리를 반복합니다.
}
//마찬가지로 뉴스의 하위 카테고리를 반복할 수 있습니다.
$result=$db->query("select * from class where f_id=1"); //f_id=1인 카테고리, 즉 'News'의 하위 카테고리를 찾습니다.
while($row=$result->fetch_assoc()){
echo $row['이름']."
"; //이렇게 하면 '뉴스'의 하위 카테고리가 순환됩니다. 참고: 하위 카테고리만 제외하고 하위 카테고리만 순환합니다.
}
//여기서 작성하면 문제가 발견됩니다. 이 분류가 10단계 분류인 경우 각 하위 범주를 순환하려면 10개의 루프를 작성해야 합니까? 더 많은 분류 수준이 있다면 이렇게 쓰는 것은 분명히 비현실적입니다.
//그렇다면 해결책은 무엇입니까? 재귀 함수를 작성하고, f_id를 매개변수로 전달하고, 각 f_id 값을 계속 반복할 수 있습니다. 즉, 각 f_id 값의 하위 클래스를 반복할 수 있습니다.
//먼저 각 카테고리의 값을 2차원 배열로 저장하는데, 이는 다음 재귀 함수에서 유용합니다.
$result=$db->query("클래스에서 * 선택")
while($row=$result->fetch_assoc()){
$arr[]=array($row[id],$row[f_id],$row[name]); //각 행에는 카테고리의 id, f_id, 이름 정보가 저장됩니다.
}
function fenlei($f_id=0){ //$f_id는 0으로 초기화됩니다. 즉, 최대 분류부터 순환이 시작됩니다.
Global $arr; //$arr을 함수에서 참조하기 전에 전역 변수로 선언합니다.
for($i=0;$i
If($arr[$i][1]==$f_id){ //$arr[$i][1]은 $i번째 카테고리의 f_id 값을 나타냅니다. $f_id=0으로 시작합니다. 즉, f_id=0이라는 분류를 출력합니다.
echo $arr[$i][2]."
"; //$arr[$i][1]은 $i번째 카테고리의 이름 값을 나타냅니다.
fenlei($arr[$i][0]); //$arr[$i][1]은 $i번째 카테고리의 id 값을 나타냅니다. 재귀를 수행합니다. 즉, 자신의 ID를 f_id 매개변수로 사용하여 자신의 서브클래스를 재활용합니다.
}
}
}
?>
id, parentid, name, 세 가지 필드 알고리즘도 매우 간단하고 재귀적입니다. 과거에는 재귀를 사용할 때 매우 어리석었습니다. 재귀에서는 모든 하위 클래스가 데이터 테이블을 쿼리하여 얻어졌기 때문입니다. . 최근에 저는 지구상의 모든 사람들이 생각할 수 있는 방법이라는 아이디어와 생각을 하게 되었습니다. 코드는 다음과 같습니다. 클래스는 다음과 같습니다.
코드 복사 코드는 다음과 같습니다.
클래스 트리 {
/**
* 모든 기밀 정보는 데이터베이스에서 쿼리됩니다
* @var 배열
*/
var $arr;
/**
* 다음 형식
* var $arr = 배열(
1 => array('id'=>'1','parentid'=>0,'name'=>'첫 번째 수준 열 1'),
2 => array('id'=>'2','parentid'=>0,'name'=>'첫 번째 수준 열 2'),
3 => array('id'=>'3','parentid'=>1,'name'=>'두 번째 수준 열 1'),
);*/
/**
* 출력 구조
* @var 배열
*/
var $tree = 배열();
/**
* 트리 재귀의 깊이
* @var int
*/
var $deep = 1;
/**
* 나무 모양의 수정 기호 생성
* @var 배열
*/
var $icon = array('│','├','└');
/**
* 지정된 ID를 사용하여 하위 트리 구조를 생성합니다
* @param int $rootid 트리 구조의 ID를 얻으려면
* @param string 재귀에 사용되는 $add 접두사
* @param bool $parent_end는 상위 카테고리가 마지막 카테고리인지 여부를 식별합니다
*/
함수 getTree($rootid = 0,$add = ”,$parent_end =true){
$is_top = 1;
$child_arr = $this->getChild($rootid);
if(is_array($child_arr)){
$cnt = 개수($child_arr);
foreach($child_arr as $key => $child){
$cid = $child['id'];
$child_child = $this->getChild($cid);
if($this->deep >1){
if($is_top == 1 && $this->deep > 1){
$space = $this->아이콘[1];
if(!$parent_end)
$add .= $this->아이콘[0];
else $add .= ' ';
}
if($is_top == $cnt){
$space = $this->아이콘[2];
$parent_end = 사실;
}else {
$space = $this->아이콘[1];
$parent_end = 거짓;
}
}
$this->tree[] = array('spacer'=>$add.$k.$space,
'이름'=>$child['이름'],
'id'=>$cid
);
$is_top ;
$this->깊은 ;
if($this->getChild($cid))
$this->getTree($cid,$add,$parent_end);
$이->깊은–;
}
}
$this->tree를 반환합니다.
}
/**
* 하위 분류 배열 가져오기
* @param int $root
*/
함수 getChild($root = 0){
$a = $child = 배열();
foreach($this->arr as $id=>$a){
if($a['parentid'] == $root){
$child[$a['id']] = $a;
}
}
$child?$child:false를 반환합니다.
}
/**
* 소스 배열 설정
* @param $arr
*/
함수 setArr($arr = array()){
$this->arr = $arr;
}
}
?>
일반적인 次查询把结构保存进一个数组, 再数组进行递归运算, 无疑极大的提高了程序运行效率, 使用代码很简单.
希望本文所述对大家程序设计有所帮助。