这个函数给了我一个无限循环
function getCats($parent,$level){
// retrieve all children of $parent
$result = "";
$query = "SELECT title,parent_id from t_cats where parent_id = '$parent'";
if($rs = C_DB::fetchRecordset($query)){
while($row = C_DB::fetchRow($rs)){
$result .= str_repeat($parent,$level).$row['title']."\n";
getCats($row['parent_id'],$level+1);
}
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
这是我的数据库表
CREATE TABLE `db`.`t_cats` (
`ID` int(10) unsigned NOT NULL auto_increment,
`datasource_id` int(10) unsigned default '0',
`version` char(10) character set latin1 default 'edit',
`status` char(10) character set latin1 default 'new',
`modified_date` datetime default NULL,
`modified_by` int(10) unsigned default '0',
`title` char(255) character set latin1 default NULL,
`parent_id` int(11) default NULL,
PRIMARY KEY (`ID`),
KEY `idx_datasource_id` (`datasource_id`)
) ENGINE=MyISAM AUTO_INCREMENT=50 DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
我只是希望能够递归我的类别列表.
但是我做错了什么?
编辑:
function getCats($parent,$level){
// retrieve all children of $parent
$result ="";
$query = "SELECT title,parent_id from t_cats where parent_id = '$parent'";
if($rs = C_DB::fetchRecordset($query)){
while($row = C_DB::fetchRow($rs)){
$result.= str_repeat($parent,$level).$row['title']."\n";
getCats($row['id'],$level + 1 );
}
}
return $result;
}
Run Code Online (Sandbox Code Playgroud)
这条线看起来错了:
getCats($row['parent_id'],$level+1);
Run Code Online (Sandbox Code Playgroud)
您应该使用当前子ID调用它 - 在您使用相同的ID一遍又一遍地调用它时.像这样的东西(你需要从你的表中选择id):
getCats($row['id'], $level + 1);
Run Code Online (Sandbox Code Playgroud)
编辑:您需要更新您的查询以选择id:
$query = "SELECT id, title, parent_id from t_cats where parent_id = '$parent' AND id != parent_id";
Run Code Online (Sandbox Code Playgroud)
如果一个项目是它自己的父项,我还添加了一点来阻止它进入循环.