This time I will bring you CMSPRESS to achieve unlimited classification (with code). What are the precautions for CMSPRESS to implement unlimited classification? . Here are actual cases, let’s take a look.
SuperInfinite Classification The core code is very simple and efficient and less than 10 lines
In addition, I want to find out the shortcomings of this classification and a more efficient and simple infinite classification method^_^
The core code is as follows
class Tool { static public $treeList = array(); //存放无限分类结果如果一页面有多个无限分类可以使用 Tool::$treeList = array(); 清空 /** * 无限级分类 * @access public * @param Array $data //数据库里获取的结果集 * @param Int $pid * @param Int $count //第几级分类 * @return Array $treeList */ static public function tree(&$data,$pid = 0,$count = 1) { foreach ($data as $key => $value){ if($value['Pid']==$pid){ $value['Count'] = $count; self::$treeList []=$value; unset($data[$key]); self::tree($data,$value['Id'],$count+1); } } return self::$treeList ; } }
$treeList[] Saving the sorting results basically means performing a sorting and saving, and then you can unset($data[$key]); because it can no longer be used
&$data uses parameter passing by address, combined with unset($data[$key]); to reduce the number of loops, which improves the efficiency several times.
But the Pid needs to be sorted by ASC, otherwise the display will be incomplete.
$value['Count'] = $count; For the current level, a tree structure will be generated by level in the template
The data structure before and after sorting is as follows
The fields required by the table are Id, Pid
Data structure before sorting
id pid
1 0
2 0
3 1
4 3
Sorted data structure
id pid count
1 0 1
3 1 2
4 3 3
2 0 1
//默认列表 public function index() { $menu = M('Menu'); $list = $menu->order('Pid ASC,Morder DESC,Id ASC')->select(); $this->assign('List',Tool::tree($list)); $this->display(); }
<td style=" text-indent :<{$vo['Count']*20}>px;"><neq name="vo.Count" value="1">| -- </neq><{$vo.Name}></td>
Using the template in the
Tested if For 3,000 items, it takes 0.5 seconds. For 1,000 items, it takes about 0.02 seconds. If it exceeds 3,000, the efficiency will be greatly reduced. The efficiency of about 2,000 is still relatively high without more detailed testing.
I believe you have mastered it after reading the case in this article. For more exciting methods, please pay attention to other related articles on the php Chinese website!
Recommended reading:
Detailed explanation of the use of PHP delayed static binding
thinkPHP framework automatic filling principle and usage detailed explanation
The above is the detailed content of CMSPRESS realizes unlimited classification (with code). For more information, please follow other related articles on the PHP Chinese website!