php 导航 无限级分类 zendframework

下面的以zendframework 1为例

<?php

class Model_DbTable_Category extends Zend_Db_Table{

protected  $_name="category";

protected  $_primary="categoryId";

//获取某分类的直接子分类

function getSons($categorys,$catId=0){

$sons=array();

foreach($categorys as $item){

if($item[‘parentId‘]==$catId)

$sons[]=$item;

}

return $sons;

}

//获取某个分类的所有子分类

function getSubs($categorys,$catId=0,$level=1){

$subs=array();

foreach($categorys as $item){

if($item[‘parentId‘]==$catId){

$item[‘level‘]=$level;

$subs[]=$item;

$subs=array_merge($subs,$this->getSubs($categorys,$item[‘categoryId‘],$level+1));

}

}

return $subs;

}

//获取某个分类的所有父分类

//方法一,递归

function getParents($categorys,$catId){

$tree=array();

foreach($categorys as $item){

if($item[‘categoryId‘]==$catId){

if($item[‘parentId‘]>0)

$tree=array_merge($tree,$this->getParents($categorys,$item[‘parentId‘]));

$tree[]=$item;

break;

}

}

return $tree;

}

//方法二,迭代

function getParents2($categorys,$catId){

$tree=array();

while($catId != 0){

foreach($categorys as $item){

if($item[‘categoryId‘]==$catId){

$tree[]=$item;

$catId=$item[‘parentId‘];

break;

}

}

}

return $tree;

}

}

<?php

require_once ‘BaseController.php‘;

class CategoryController extends  BaseController{

public function indexAction(){

$categoryModel=new Model_DbTable_Category();

$categorys=$categoryModel->fetchAll()->toArray();

//获取某分类的直接子分类

$result=$categoryModel->getSons($categorys,1);

foreach($result as $item)

echo $item[‘categoryName‘].‘<br>‘;

echo ‘<hr>‘;

//获取所欲分类的子分类

$result=$categoryModel->getSubs($categorys,0);

foreach($result as $item)

echo str_repeat(‘--‘,$item[‘level‘]).$item[‘categoryName‘].‘<br>‘;

echo ‘<hr>‘;

//获取某个分类的所有父分类

//方法一,递归

$result=$categoryModel->getParents($categorys,7);

foreach($result as $item)

echo $item[‘categoryName‘].‘ >> ‘;

echo ‘<hr>‘;

//获取某个分类的所有父分类

$result=$categoryModel->getParents2($categorys,15);

foreach($result as $item)

echo $item[‘categoryName‘].‘ >> ‘;

}

}

数据库部分

CREATE TABLE IF NOT EXISTS `sorts` (

`sid` smallint(5) unsigned NOT NULL AUTO_INCREMENT,

`sparent` smallint(5) unsigned NOT NULL DEFAULT ‘0‘,

`name` varchar(50) NOT NULL,

PRIMARY KEY (`sid`)

) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;

INSERT INTO `sorts` (`sid`, `sparent`, `name`) VALUES

(1, 0, ‘php‘),

(2, 0, ‘java‘),

(3, 0, ‘c/c++‘),

(4, 1, ‘php基础‘),

(5, 1, ‘php开源资料‘),

(6, 1, ‘php框架‘),

(7, 2, ‘java Se‘),

(8, 2, ‘java EE‘),

(9, 2, ‘java Me‘),

(10, 3, ‘c/c++基础编程‘),

(11, 3, ‘c/c++系统开发‘),

(12, 3, ‘c嵌入式编程‘),

(13, 3, ‘c++应用开发‘),

(14, 13, ‘c++桌面应用开发‘),

(15, 13, ‘c++游戏开发‘);

实现效果图:

时间: 2024-10-23 15:48:33

php 导航 无限级分类 zendframework的相关文章

php利用递归函数实现无限级分类

相信很多学php的很多小伙伴都会尝试做一个网上商城作为提升自己技术的一种途径.各种对商品分类,商品名之类的操作应该是得心应手,那么就可以尝试下无限级分类列表的制作了. 什么是无限级分类? 无限级分类是一种分类技巧,例如部门组织,文章分类,学科分类等常用到无限级分类,将其简单理解成分类就好了.其实我们仔细想一下,生活中的分类简直太多了,衣服可以分为男装和女装,也可以分为上衣和裤子,也可以根据年龄段分类.分类无处不在,分类显得“无限”.我这里就不说无限分类的必要性了. 无限级分类原理简介 无限分类看

无限级分类

$area = array( array('id'=>1,'name'=>'安徽','parent'=>0), array('id'=>2,'name'=>'海淀','parent'=>7), array('id'=>3,'name'=>'濉溪县','parent'=>5), array('id'=>4,'name'=>'昌平','parent'=>7), array('id'=>5,'name'=>'淮北','paren

一道无限级分类题的 PHP 实现

今天有网友出了道题: 给出如下的父子结构(你可以用你所用语言的类似结构来描述,第一列是父,第二列是子),将其梳理成类似如图的层次父子结构. origin = [('A112', 'A1122'), ('A', 'A1'), ('A', 'A2'), ('A1', 'A11'), ('A2', 'A21'), ('A2', 'A22'), ('A', 'A3'), ('A22', 'A221'), ('A11', 'A111'), ('A21', 'A211'), ('A11', 'A112'),

(实用篇)PHP递归实现无限级分类

在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 递归,简单的说就是一段程序代码的重复调用,当把代码写到一个自定义函数中,将参数等变量保存,函数中重复调用函数,直到达到某个条件才跳出,返回相应的数据. 首先

mysql 无限级分类实现思路

第一种方案: 使用递归算法,也是使用频率最多的,大部分开源程序也是这么处理,不过一般都只用到四级分类. 这种算法的数据库结构设计最为简单.category表中一个字段id,一个字段fid(父id).这样可以根据WHERE id = fid来判断上一级内容,运用递归至最顶层. 分析:通过这种数据库设计出的无限级,可以说读取的时候相当费劲,所以大部分的程序最多3-4级分类,这就足以满足需求,从而一次性读出所有的数据,再对得到数组或者对象进行递归.本身负荷还是没太大问题.但是如果分类到更多级,那是不可

夺命雷公狗---无限级分类NO2

<?php header("Content-Type:text/html;charset=utf-8"); /* 无限级分类.牵扯2个应用 0是-找指定栏目的子栏目 1是-找指定栏目的子孙栏目,即子孙树 2是-找指定栏目的父栏目/父父栏目....顶级栏目,即家谱树 */ $aarr = array( array('id'=>1,'name'=>'安徽','pid'=>0), array('id'=>2,'name'=>'海淀','pid'=>7

夺命雷公狗---无限级分类NO3

<?php header("Content-Type:text/html;charset=utf-8"); /* 无限级分类.牵扯2个应用 0是-找指定栏目的子栏目 1是-找指定栏目的子孙栏目,即子孙树 2是-找指定栏目的父栏目/父父栏目....顶级栏目,即家谱树 */ $aarr = array( array('id'=>1,'name'=>'安徽','pid'=>0), array('id'=>2,'name'=>'海淀','pid'=>7

无限级分类功能实践

在一般的web开发中,无论是一般的企业建站,内部OA,电商,无限级分类都是一种很常见的功能. 实现该业务常见有三种(本人已知)方式,分别有其不同的优缺点,一般最常用是第一种,接下来分别简单介绍其数据结构和大体实现. 第一种: 表结构 字段 类型 主键 id int 是 parent_id int 否 value varchar 否 CREATE TABLE `NewTable` ( `id` int UNSIGNED NOT NULL , `parent_id` int UNSIGNED NOT

php无限级分类实战——评论及回复功能

经常在各大论坛或新闻板块详情页面下边看到评论功能,当然不单单是直接发表评论内容那么简单, 可以对别人的评论进行回复,别人又可以对你的回复再次评论或回复,如此反复,理论上可以说是 没有休止,从技术角度分析很容易想到运用无限级分类技术存储数据,运用递归获取评论层级结构 数据,运用ajax实现评论页面交互,这里用thinkphp框架做个简单的demo练练手,为了简化流程 这里第三级评论不再提供回复功能,当然只要在这个基础上稍作修改就可以实现无限回复功能,主 要是view层样式修改较麻烦,需花些时间.