在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
当你学习php无限极分类的时候,大家都觉得一个字“难”我也觉得很难,所以,现在都还在看,因为工作要用到,所以,就必须得研究研究。 id name pid sort
1 PHP 0 1 2 Javascript 0 2 3 MySQL 0 3 4 PHP类 1 1 5 smarty 1 2 6 私有方法 4 1 7 jQuery 2 1
class Category {
static public function sortOut($cate,$pid=0,$level=0,$html='--'){ $tree = array(); foreach($cate as $v){ if($v['id'] == $pid){ $v['level'] = $level + 1; $v['html'] = str_repeat($html, $level); $tree[] = $v; $tree = array_merge($tree, self::sortOut($cate,$v['id'],$level+1,$html)); } } return $tree; } }
id name pid level sort
1 PHP 0 1 1 4 --php类 1 2 1 6 ----私有方法 4 3 1 5 --smarty 1 2 2 2 Javascript 0 1 2 7 --php类 2 2 1 3 MySQL 0 1 3
----------------------------------------------
好像不需要array_merge function tree(&$list,$pid=0,$level=0,$html='--'){
static $tree = array(); foreach($list as $v){ if($v['pid'] == $pid){ $v['sort'] = $level; $v['html'] = str_repeat($html,$level); $tree[] = $v; tree($list,$v['id'],$level+1); } } return $tree; }
有这样一个表, 现在有个分类ID,程序要找到它上级的上级的上级……分类的ID,简单说就是找出顶级分类的ID。比如“新鲜水果”的ID是13,对应父类ID是5,而5的父ID是1,1没有父类,也就是顶级分类了。 以前年轻气盛不懂事,总想着用递归来查找,然后再将结果缓存来解决性能问题。 最近有个同事问我怎么“优雅”的解决这个问题。于是我灵机一动,就有了如下解决方案: <?php $sql = "select id, pid from tablename "; // 查询后 将结果处理成 如下数组格式 $arr = [ // id => pid 1 => 0, // 省略... 5 => 1, // 省略... 13 => 5 ]; // 建议将这数组缓存起来 $id = 13; while($arr[$id]) { $id = $arr[$id]; } echo $id; // 1 不得不说:真是太优雅了!连我都佩服我自己了,同事更是五体投地,痛哭流涕。因为他写了几十行循环再判断再递归的代码,被我用两行代码替换了…… |
2022-08-30
2022-08-17
2022-11-06
2022-08-15
2022-08-18
请发表评论