我将我的类别和子类别存储在同一个表中,每个类别或子类别可能都有自己的子类别
+--------+---------------+---------------+
| id | title | parent |
+--------+---------------+---------------+
| 1 | black | 0 |
| 2 | red | 0 |
| 3 | dark red | 2 |
| 4 | light red | 2 |
| 5 | very light red| 4 |
+--------+---------------+---------------+
我想以一种保持父子关系的方式将所有cat和sub类别存储在数组中
所以我认为递归函数是干净的方式,所以这里是我想出的最好的
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 ;
}
但即使没有孩子,我也会为每个类别获得额外的孩子! 这是jsfiddle的结果(An !!!:
答案 0 :(得分:0)
当$ childs为true时,你需要返回$ arr;)
}
return $arr;
只删除你的其他人。
对于你的结构:
$arr[$parent_id] = $ch->title;
$this->childs($ch->id , $arr );
替换为
$arr[$ch->id][ 'category' ] = $ch->title;
$arr[$ch->id][ 'childs' ] = $this->childs( $ch->id );
然后你的孩子有相同的结构