ecshop无限处理分类

<?php
function get_cate($arr){
    static $cat_options = array();
    
    if (!isset($cat_options[0]))
    {    
        $level = $last_cat_id = 0;
        $options = $cat_id_array = $level_array = array();

        if ($data === false)
        {
            while (!empty($arr))
            {
                foreach ($arr AS $key => $value)
                {

                    $cat_id = $value['cat_id']; 
                    
  
                    if ($level == 0 && $last_cat_id == 0) 
                    {    
                        if ($value['parent_id'] > 0)
                        {    // 非父类
                            break;
                        }

                        $options[$cat_id]          = $value;
                        $options[$cat_id]['level'] = $level;
                        $options[$cat_id]['id']    = $cat_id;
                        $options[$cat_id]['name']  = $value['cat_name'];
                        unset($arr[$key]);

                        if ($value['has_children'] == 0)
                        {
                            continue;
                        }
                        
                        $last_cat_id  = $cat_id; 

                        $cat_id_array = array($cat_id);    
 
                        $level_array[$last_cat_id] = ++$level;
                        
                        continue;
                    }    // end if ($level == 0 && $last_cat_id == 0)

                    if ($value['parent_id'] == $last_cat_id)     
                    {
                        $options[$cat_id]          = $value;
                        $options[$cat_id]['level'] = $level;
                        $options[$cat_id]['id']    = $cat_id;
                        $options[$cat_id]['name']  = $value['cat_name'];
                        unset($arr[$key]);

                        if ($value['has_children'] > 0)
                        {
							/*
							 判断是否是有跨级的,如
							 $array = array(1=>'',
												2=>'',
													3=>'',
														4=>''
													5=>'')
							$array[3],$array[5]之间,由于在array[4]时,此时为末节点
							此时会由
							$last_cat_id = array_pop($cat_id_array);
							所以会导致 array[3]独立出来,这样就必须加上
							*/	
                            if (end($cat_id_array) != $last_cat_id)
                            {
                                $cat_id_array[] = $last_cat_id;
                            }
                            $last_cat_id    = $cat_id;    
                            $cat_id_array[] = $cat_id;
                            $level_array[$last_cat_id] = ++$level;
                        }
                    }    // eof if ($value['parent_id'] == $last_cat_id)
                    elseif ($value['parent_id'] > $last_cat_id)    
                    {
                        break;
                    }    // eof if ($value['parent_id'] == $last_cat_id)
                }
                                // end foreach ------------
                $count = count($cat_id_array);    
                
                if ($count > 1)
                {
                    $last_cat_id = array_pop($cat_id_array);
                }
                elseif ($count == 1)
                {    //由于上一级的原因,会导致 $last_cat_id是子节点
                    if ($last_cat_id != end($cat_id_array))
                    {
                        $last_cat_id = end($cat_id_array);
                    }
                    else
                    {
                        $level = 0;
                        $last_cat_id = 0;
                        $cat_id_array = array();
                        continue;
                    }
                }

                if ($last_cat_id && isset($level_array[$last_cat_id]))
                {
                    $level = $level_array[$last_cat_id];
                }
                else
                {
                    $level = 0;
                }
            }
                        // end while ------------
            //如果数组过大,不采用静态缓存方式
            if (count($options) <= 2000)
            {
                write_static_cache('cat_option_static', $options);
            }
        }
        else
        {
            $options = $data;
        }
        $cat_options[0] = $options;
    }
    else
    {
        $options = $cat_options[0];
    }

    if (!$spec_cat_id)
    {
        return $options;
    }
    else
    {
        if (empty($options[$spec_cat_id]))
        {
            return array();
        }

        $spec_cat_id_level = $options[$spec_cat_id]['level'];

        foreach ($options AS $key => $value)
        {
            if ($key != $spec_cat_id)
            {
                unset($options[$key]);
            }
            else
            {
                break;
            }
        }

        $spec_cat_id_array = array();
        foreach ($options AS $key => $value)
        {
            if (($spec_cat_id_level == $value['level'] && $value['cat_id'] != $spec_cat_id) ||
                ($spec_cat_id_level > $value['level']))
            {
                break;
            }
            else
            {
                $spec_cat_id_array[$key] = $value;
            }
        }
        $cat_options[$spec_cat_id] = $spec_cat_id_array;

        return $spec_cat_id_array;
    }
}
 

  

你可能感兴趣的:(ecshop无限处理分类)