php无限极分类递归排序实现方法

发布时间:2026-09-28 19:19:52 浏览次数:3

PHP无限极分类递归排序实现方法

在Web应用程序的开发中,无限极分类是一种很常见的需求,在PHP中实现无限极分类需要使用到递归排序算法。下面详细介绍如何使用PHP实现无限极分类递归排序。

算法思路

无限极分类递归排序算法的思路如下:

  • 1、获取一维数组的所有子节点
  • 2、对每个子节点进行递归排序
  • 3、将排序后的每个子节点添加到父节点中
  • 4、返回所有排好序的子节点数组

实现步骤

准备测试数据

首先准备测试数据,这里以商品分类为例,定义一个数组表示商品分类及其子分类的关系:

$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实现无限极分类递归排序了。透过代码深入理解算法,结合实际应用场景,可以举一反三应用到实际开发中。

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477