二次开发中经常遇到一种情况,就是判断一个分类是否属于某一个大的分类,而大的分类包括很多子分类成树状结构,基本的方法都是先获取大分类下的所有子分类的信息,然后再挨个比较看是否有ID和待定ID相等。一种用递归方法获取大分类所有的ID;第二种用队列等非递归的方法获取所有子分类ID,第二种明显性能要好一些。

本文在magento的模板文件里测试成功一个函数:输入一个分类的ID,将返回该分类下所有子分类(递归获取)的ID,组成一个数组返回。所用的方法为用队列实现的非递归方法:

/**
* 输入:某一个分类的ID数字
* 返回: 该分类下所有子分类的ID组成的数组
* 可用于: 模板文件中可以直接使用,也可以用于action等文件类内部
* 实现思路:使用队列的方法实现非递归,对树从上往下遍历
**/
function getAllChildrenOfCategory($cateid){$resArr = array();//结果数组$queueArr = array();//队列数组array_push($queueArr,$cateid);while($currentcid = array_pop($queueArr)){array_push($resArr,$currentcid);                                            //处理当前节点的孩子节点$_category = Mage::getModel('catalog/category')->load($currentcid);$subcats = $_category->getChildren();$idarrs = explode(',',$subcats);foreach($idarrs as $subCatid){if(!$subCatid) continue;$_subcategory = Mage::getModel('catalog/category')->load($subCatid);if($_subcategory->getIsActive()) {array_push($queueArr,$subCatid);}}reset($queueArr);}return $resArr;
}
//测试一下
$allProducerIds = getAllChildrenOfCategory(19);
$allDesignedIds = getAllChildrenOfCategory(18);

PHP没有栈和队列的数据结构,可以用数组来模拟实现,数组的array_push和array_pop刚好就是这么两个方法,其中因为array_pop每次会改变数组的指针,所以可以在循环的末尾reset一下重置数组。

最后的测试,输入的是两个分类的ID,函数执行结束以后,返回的数组里面就是所有子分类的ID。

转载于:https://www.cnblogs.com/crazyant/archive/2012/11/10/2823896.html

Magento获取指定分类下的所有子分类信息相关推荐

  1. php遍历子分类的函数,emlog程序获取主分类下的所有子分类ID函数

    emlog程序获取主分类下的所有子分类ID函数 蓝叶    网站设计    2021-01-04    208    0评论 emlog程序在制作模版时,需要增加一些自定义的列表调用,只设置主分类ID ...

  2. 【Unity】获取当前物体下的所有子物体

    使用Transform.GetComponentsInChildren<>()的方法来获取指定物体下的所有子物体,并复制给数组,然后进行遍历 activePanel为指定物体,string ...

  3. python获取指定目录下所有文件名os.walk和os.listdir

    os.walk 返回指定路径下所有文件和子文件夹中所有文件列表 其中文件夹下路径如下: import os def file_name_walk(file_dir):for root, dirs, f ...

  4. python 获取指定目录下的图片文件

    import os#获取指定路径下所有的图片文件 def listfile(dirpath):# pathdir = os.listdir(dirpath) #图片列表imgFileList = os ...

  5. Android之获取指定目录下的所有特殊文件名字

    1.获取指定目录下的所有特殊文件名字 比如我们在sdcard目录下的chenyu这个文件夹里面获取以so文件结尾的所有文件名 2.代码 public ArrayList<String> g ...

  6. 使用INNER JOIN ON 多表关联查询,获取指定用户下指定权限的资源SQL:

    摘要:最近在看一个开源框架,其中用户,角色,资源,这块我感觉比较重要,所以就自己也模仿着写了下,其中在获取指定用户下的权限资源的时候遇到问题了,开始时,我首先想到的方法就是通过用户->角色-&g ...

  7. 获取指定目录下的所有文件名,包括子目录函数

    获取指定目录下所有文件名,这是一个一个目录遍历的方法: function TPathWatch.FList(ASourFile: string): TStrings; // 查找子目录 AString ...

  8. Python入门--获取指定目录下的所有.py文件

    #列出指定目录下的所有py文件 import os path=os.getcwd()#获取当前目录 print(path) lst=os.listdir(path)#返回指定路径下的文件和目录信息 f ...

  9. 数值策划的自我修养(二):用VBA批量获取指定目录下文件的名字

    目录索引 批量获取指定目录下文件的名字 批量获取指定目录下文件的名字 游戏项目的管理,自然少不了配置表的管理.今天记录的是如何在制作配置表管理工具时批量获取配置表文件夹下的配置表名并顺序写到一张Exc ...

最新文章

  1. 病毒入侵:全靠分布式
  2. python从命令行获取参数_python从命令行获取参数操作
  3. boost::math模块计算 Bessel、Neumann 和 Airy 函数的零(或根)的函数的测试程序
  4. vb.net textbox如何输入的时候显示提示文字_如何快速上手CAD?这15种教课书式的ideas请你收下...
  5. 机器学习线性回归学习心得_机器学习中的线性回归
  6. Java中的宏变量,宏替换详解。
  7. 是谁掌控了丁真的故事走向?
  8. Java开发框架——Struts框架
  9. 【Luogu】P1122最大子树和(DFS,树上DP)
  10. SSH中 三大框架的各自的作用及好处
  11. 搭建个人论坛网站图文教程
  12. android 常用图像密码,这几种Android图形密码最常用
  13. 电商后台管理系统——权限管理模块
  14. USB大容量存储设备无法启动--这个设备(服务)的驱动程序已被禁用。另一个驱动程序可以提供这个功能。 (代码 32)
  15. 基于TX2的全向四轮小车搭建(一)
  16. 华为机试od社招刷题攻略-目录
  17. 旅行青蛙分析(Android篇)
  18. EPMS- 让企业应用更加轻便!
  19. C/C++ 如何设计框架
  20. 管理职工工资属于计算机什么应用领域,计算机练习题

热门文章

  1. mysql怎么滤空_《MySQL 入门教程》第 08 篇 过滤条件
  2. linux下mvn的运行配置,Linux内网环境下使用Nexus配置Maven私有仓库
  3. java 自定义注解
  4. php开发mvc教程,php开发一个简单的MVC
  5. php 获取xlsx,PHPExcel获取.xlsx文件内容
  6. redis指定配置文件启动_深入学习 Redis 集群搭建方案及实现原理
  7. 无监督学习与有监督学习的本质区别是什么_吴恩达老师课程笔记系列第三节-无监督学习定义...
  8. 数据结构——图:极大小连通子图、图的存储结构、图的遍历
  9. 计算机考试一级考试基础知识,2016计算机一级考试msoffice基础知识
  10. python中保留小数_python保留小数位的三种实现方法