Maison > Article > développement back-end > Implémenter une classification illimitée en PHP
Le contenu de cet article concerne la classification infinie pratique en PHP. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer
Dans notre travail, la classification infinie existe. de nombreuses applications. En fait, l'idée n'est pas difficile, il s'agit simplement d'utiliser la pensée récursive pour s'appeler. Jetons un coup d'œil à la fonction de classification infinie que j'ai écrite :
header("content-type:text/html;charset=utf-8");//测试数组 $arr=array( array('id'=>2,'name'=>'分类2','parent_id'=>1), array('id'=>9,'name'=>'分类9','parent_id'=>8), array('id'=>1,'name'=>'分类1','parent_id'=>0), array('id'=>7,'name'=>'分类7','parent_id'=>0), array('id'=>3,'name'=>'分类3','parent_id'=>2), array('id'=>4,'name'=>'分类4','parent_id'=>0), array('id'=>6,'name'=>'分类6','parent_id'=>5), array('id'=>8,'name'=>'分类8','parent_id'=>7), array('id'=>5,'name'=>'分类5','parent_id'=>4) );/** * 已知子类id 得到父类树形结构 * @param [type] $data [要查询的数组] * @param [type] $id [子类id] * @param integer $level [缩进系数] * @param boolean $isClear [调用时为true,多次调用不相互叠加] * @return [type] [返回结果树形结构] */function getParent($data,$id,$level=0,$is_Clear=false){ static $_rec = array(); if ($is_Clear == true) { $_rec = array(); } foreach ($data as $k=>$v) { if ( $v['id'] == $id) { $_rec[] =$v; // if ($v['parent_id'] != 0) { getParent($data,$v['parent_id']); // } } } $rec = array_reverse($_rec); for ($i=0; $i $rec[$i]['level']=$level; $level++; } //把自己拿出来,自己不属于父类 array_pop($rec); return $rec; }/** * 已知父类id找 得到子类树形结构 * @param [type] $data [要查询的数组] * @param [type] $id [父类id] * @param integer $level [缩进系数] * @param boolean $isClear [调用时为true,多次调用不相互叠加] * @return [type] [返回结果树形结构] */function getChilds($data,$id,$level=0,$isClear=false){ static $rec = []; if ($isClear == true) { $rec =[]; } foreach ($data as $k => $v) { if ($v['parent_id'] == $id) { $v['level']=$level; $rec[] =$v; getChilds($data,$v['id'],++$level); } } return $rec; }/** * 已知父类id,得到子类id树形结构;区别在于$row[]=$v['id'],只赋值id; * getParent(),可改写成getParentid(); * @param [type] $data [description] * @param [type] $id [description] * @param boolean $col [description] * @return [type] [description] */ function getChildsId($data,$id,$col=false){ static $row=array(); if($col) $row=array(); foreach ($data as $k => $v) { if($v['parent_id'] ==$id){ $row[]=$v['id']; getChildsId($data,$v['id']); } } return $row; }/** * 已知父类id,得到树形结构; * 结合getParent(),若不弹出自己,即已知子类id,得到树形结构 * @param [type] $data [description] * @param [type] $parent_id [description] * @param integer $level [description] * @param boolean $col [description] * @return [type] [description] */function tree($data,$parent_id,$level=0,$col=false){ static $res=array(); if($col) $res=array(); foreach ($data as $k => $v) { if($v['parent_id'] == $parent_id){ $v['level']=$level; $res[]=$v; tree($data,$v['id'],$level+1); } } return $res; }
J'espère que tout le monde laissera de précieux commentaires pour améliorer et enrichir mon blog Bienvenue pour échanger et apprendre.
Recommandations associées :
Comment créer une arborescence de classification Infinitus
php implémente un arbre de classification infini sans récursion
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!