我存储我的类别和子类别在同一个表像这样,每个类别或子类别可以有它自己的子类别
+--------+---------------+---------------+
| id | title | parent |
+--------+---------------+---------------+
| 1 | black | 0 |
| 2 | red | 0 |
| 3 | dark red | 2 |
| 4 | light red | 2 |
| 5 | very light red| 4 |
+--------+---------------+---------------+
我希望将所有类别和子类别存储在一个数组中,使它们保持父子关系
所以我认为递归函数是一种干净的方法,所以这是我想到的最好的方法
function get_categories(){
$array = array();
$all = $this->db->get('category' , array('parent'=>0) );
// this query gets all the parent categories ( select * where parent = 0 )
foreach($all as $a )
{
$array[$a->id]['category'] = $a->title ;
$array[$a->id]['childs'] = $this->childs( $a->id );
}
echo '<pre>';print_r($array); echo '</pre>';
}
// my recursive function
function childs($parent_id = 0 , $arr = array()){
$childs = $this->db->get('category' , array('parent'=>$parent_id ) );
// this query : select * where parent = $parent_id
if($childs)
{
foreach($childs as $ch)
{
$arr[$ch->id][ 'category' ] = $ch->title;
$arr[$ch->id][ 'childs' ] = $this->childs($ch->id , $arr );
}
}
return $arr ;
}
但是我得到了很多额外的查尔兹为每一个类别,即使没有孩子!以下是在jsfidle(一个!!!:
http://jsfiddle.net/nkxgc4by/
2条答案
按热度按时间5vf7fwbs1#
当$childs为真时,需要返回$arr;)
只删除您的其他。
对于您的结构:
替换为
那么你的孩子也有同样的结构
a8jjtwal2#