发布时间:2026-09-28 19:19:52 浏览次数:3
在Web应用程序的开发中,无限极分类是一种很常见的需求,在PHP中实现无限极分类需要使用到递归排序算法。下面详细介绍如何使用PHP实现无限极分类递归排序。
无限极分类递归排序算法的思路如下:
首先准备测试数据,这里以商品分类为例,定义一个数组表示商品分类及其子分类的关系:
$category = [ ['id'=>1,'name'=>'电器','parent_id'=>0], ['id'=>2,'name'=>'手机','parent_id'=>1], ['id'=>3,'name'=>'电视','parent_id'=>1], ['id'=>4,'name'=>'三星手机','parent_id'=>2], ['id'=>5,'name'=>'小米手机','parent_id'=>2], ['id'=>6,'name'=>'索尼电视','parent_id'=>3], ['id'=>7,'name'=>'夏普电视','parent_id'=>3], ['id'=>8,'name'=>'家居','parent_id'=>0], ['id'=>9,'name'=>'沙发','parent_id'=>8], ['id'=>10,'name'=>'餐桌','parent_id'=>8], ['id'=>11,'name'=>'皮质沙发','parent_id'=>9], ['id'=>12,'name'=>'实木餐桌','parent_id'=>10],];在这个数组中,id表示节点的唯一标识,name表示节点的名称,parent_id表示节点的父节点标识,根节点的parent_id为0。
实现递归排序算法,需要编写一个递归函数。首先定义一个函数sortCategory($data,$parentId):
function sortCategory($data,$parentId=0){ $arr = []; foreach($data as $key=>$value){ if($value['parent_id'] == $parentId){ $children = sortCategory($data, $value['id']); if($children){ $value['children'] = $children; } $arr[] = $value; } } return $arr;}递归函数中的$data参数表示需要排序的数组,$parentId参数表示需要排序的父节点ID,初始默认为0。函数中,首先定义一个空数组$arr,然后遍历需要排序的数组,对于每个parent_id等于需要排序的父节点ID的元素都需要进行排序。使用递归方式对子节点进行排序,然后将排序后的子节点数组添加到父节点中,最后返回所有排好序的子节点数组。
完成递归排序算法的实现后,可以对测试数据进行排序。调用sortCategory()函数对测试数据进行排序,然后使用var_dump()输出排序结果:
echo '<pre>';var_dump(sortCategory($category));echo '</pre>';输出结果如下:
array(2) { [0]=> array(3) { ["id"]=> int(1) ["name"]=> string(6) "电器" ["children"]=> array(2) { [0]=> array(3) { ["id"]=> int(2) ["name"]=> string(6) "手机" ["children"]=> array(2) { [0]=> array(2) { ["id"]=> int(4) ["name"]=> string(12) "三星手机" } [1]=> array(2) { ["id"]=> int(5) ["name"]=> string(9) "小米手机" } } } [1]=> array(3) { ["id"]=> int(3) ["name"]=> string(6) "电视" ["children"]=> array(2) { [0]=> array(2) { ["id"]=> int(6) ["name"]=> string(9) "索尼电视" } [1]=> array(2) { ["id"]=> int(7) ["name"]=> string(9) "夏普电视" } } } } } [1]=> array(3) { ["id"]=> int(8) ["name"]=> string(6) "家居" ["children"]=> array(2) { [0]=> array(3) { ["id"]=> int(9) ["name"]=> string(6) "沙发" ["children"]=> array(1) { [0]=> array(2) { ["id"]=> int(11) ["name"]=> string(12) "皮质沙发" } } } [1]=> array(3) { ["id"]=> int(10) ["name"]=> string(6) "餐桌" ["children"]=> array(1) { [0]=> array(2) { ["id"]=> int(12) ["name"]=> string(12) "实木餐桌" } } } } }}可以看到,排序结果已经是按照层级关系排好序的树形结构。其中子节点还用数组保存了它们的子节点。
通过本文详细讲解,相信你已经明白如何使用PHP实现无限极分类递归排序了。透过代码深入理解算法,结合实际应用场景,可以举一反三应用到实际开发中。