使用递归函数用类别和子类别填充数组
using recursive function to populate an array with category and sub categories
我像这样将我的类别和子类别存储在同一个 table 中,每个类别或子类别可能有自己的子类别
+--------+---------------+---------------+
| id | title | parent |
+--------+---------------+---------------+
| 1 | black | 0 |
| 2 | red | 0 |
| 3 | dark red | 2 |
| 4 | light red | 2 |
| 5 | very light red| 4 |
+--------+---------------+---------------+
我想将所有猫和子类别存储在一个数组中,以保持它们的 parent-child 关系
所以我认为递归函数是一种干净的方法,所以这是我想出的最好的方法
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 ;
}
但即使没有 child,我也会为每个类别获得很多额外的 child!
这是 jsfiddle 中的结果(An!!!:
当 $childs 为真时,你需要 return 你的 $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 );
那你的孩子也有同样的结构
我像这样将我的类别和子类别存储在同一个 table 中,每个类别或子类别可能有自己的子类别
+--------+---------------+---------------+
| id | title | parent |
+--------+---------------+---------------+
| 1 | black | 0 |
| 2 | red | 0 |
| 3 | dark red | 2 |
| 4 | light red | 2 |
| 5 | very light red| 4 |
+--------+---------------+---------------+
我想将所有猫和子类别存储在一个数组中,以保持它们的 parent-child 关系
所以我认为递归函数是一种干净的方法,所以这是我想出的最好的方法
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 ;
}
但即使没有 child,我也会为每个类别获得很多额外的 child! 这是 jsfiddle 中的结果(An!!!:
当 $childs 为真时,你需要 return 你的 $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 );
那你的孩子也有同样的结构