这是我的表结构:
CREATE TABLE menu (
menuid int(11) NOT NULL AUTO_INCREMENT,
menuname varchar(100) NOT NULL DEFAULT '',
menulink varchar(100) NOT NULL DEFAULT '',
menuparentId int(11) NOT NULL DEFAULT '0',
menuhasChild smallint(1) NOT NULL DEFAULT '0',
menustatus smallint(1) NOT NULL DEFAULT '1',
menuorder int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (menuid)
)
我正在使用递归函数由此创建菜单结构,但在这里失败了:
function categoriesTree($id=0){
$s = "SELECT * FROM menu WHERE menuparentId = '".$id."'
ORDER BY menuorder, menuid ";
$rid = $this->db->query($s)->result_array();
$treeArray = array();
foreach($rid as $row){
$treeArray[$row['menuid']] = $row;
if($row['menuhasChild']==1){
$treeArray[$row['menuid']] = $this->categoriesTree(); //results in Fatal error: Maximum function nesting level of '100' reached, aborting!
}
}
retrun $treeArray;
}
此方法是 CodeIgniter 模型类中模型的一部分。有没有更好的方法来创建树?
最佳答案
是的,有更好的方法。所谓修正的先序树遍历算法。您可以通过谷歌搜索找到大量信息,而且我确信堆栈溢出也是如此。
好处是您可以仅使用 1 个查询来获取整个子树。 SELECTS 会很快,但修改会更重。
关于创建树结构所需的 PHP 递归帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5961377/