PHP递归获取子类ID的方法

今天遇到一个PHP递归获取子类ID的问题,是关于Joomla的,终于实现了功能,所以记下来:

这是VirtueMart中,商品分类获得子类的一个方法,有一个表,其中有两个字段,如下SQL语句,两个字段就是最常的那种无限分级的那种。

global $allcategories;
function getChild($parentId){
	global $allcategories;
	$db =  JFactory::getDBO();
	$query = 'select category_child_id from #__vm_category_xref where category_parent_id = '.$parentId;
	$db->setQuery($query);
	$childIdrows = $db->loadObjectList();
	foreach ($childIdrows as $value){
		$childid = $value->category_child_id;
		$allcategories .= $childid.',';
		getChild($childid);
	}
	return $allcategories;
}

调用的方法 :

//获得所有子类的一个集合
$childs = getChild($category_id);
$allcategory = $childs.$category_id;

 

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

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

 

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

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

thedarkside

这是一个最好的时代,这是一个最坏的时代。

stay connected

228,480

Fans

21,563

Followers

20,563

Followers

8,125

Subscribers

2,253

Subscribers

10,563

Followers

最新文章

entertainment
Buckingham Palace soil used in Tate exhibit
Oct 13, 2016
Sports
Legendary coach Steve Spurrier was truly
Oct 13, 2016
Technology
Acer reveals all-in-one Windows 10 PC
Oct 13, 2016
entertainment
Revival allows Selena Gomez to shed
Oct 13, 2016
entertainment
Buckingham Palace soil used in Tate exhibit
Oct 13, 2016
Sports
Legendary coach Steve Spurrier was truly
Oct 13, 2016
Technology
Acer reveals all-in-one Windows 10 PC
Oct 13, 2016
entertainment
Revival allows Selena Gomez to shed
Oct 13, 2016