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

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

营销型网站