php 无限级分类怎么查询末级

不及物动词 其他 138

回复

共3条回复 我来回复
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    要查询PHP无限级分类的末级,可以使用递归的方式遍历分类树,找出所有末级分类。

    首先,需要准备一个分类数据表,包含以下字段:id、name、parent_id。其中,id是分类的唯一标识,name是分类名称,parent_id是父级分类的id。

    接下来,编写一个递归函数来查询末级分类。函数的输入参数为当前分类的id,输出为所有末级分类的id数组。

    在函数内部,首先查询当前分类的子分类。使用数据库查询语句获取所有parent_id等于当前分类id的记录。如果没有子分类,说明当前分类是末级分类,将当前分类id加入结果数组。

    如果有子分类,则用递归方式调用本函数,以子分类id作为输入参数。将返回的结果数组与当前结果数组合并起来,形成新的结果数组。

    最后,返回最终的结果数组。

    下面是一个具体的示例代码:

    “`
    function getLeafCategories($parentId) {
    // 查询当前分类的子分类
    $sql = “SELECT id FROM categories WHERE parent_id = $parentId”;
    $result = $db->query($sql);

    $leafCategories = array(); // 存放末级分类的数组

    // 遍历子分类
    while($row = $result->fetch_assoc()) {
    $categoryId = $row[‘id’];
    // 递归查询子分类的末级分类
    $subLeafCategories = getLeafCategories($categoryId);
    // 将子分类的末级分类合并到结果数组中
    $leafCategories = array_merge($leafCategories, $subLeafCategories);
    }

    // 如果当前分类没有子分类,说明是末级分类
    if(empty($leafCategories)) {
    $leafCategories[] = $parentId;
    }

    return $leafCategories;
    }

    // 调用函数查询末级分类
    $leafCategories = getLeafCategories(0);

    // 输出末级分类的id数组
    print_r($leafCategories);
    “`

    以上就是查询PHP无限级分类的末级分类的方法。通过递归遍历分类树,可以找出所有末级分类,并将其储存在一个数组中返回。

    2年前 0条评论
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    在PHP中实现无限级分类的查询末级可以通过递归算法来实现。下面是具体的步骤:

    1. 创建一个函数,例如叫作`findEndLevelCategories()`,该函数接受一个分类数组作为参数。
    2. 在函数内部,创建一个新数组,用于存储末级分类。
    3. 使用foreach循环遍历分类数组。
    4. 判断当前分类是否还有子分类,可以通过判断是否存在`children`字段来判断。如果不存在,则说明当前分类是末级分类,将其添加到末级分类数组中。
    5. 如果当前分类还有子分类,则递归调用`findEndLevelCategories()`函数,将子分类作为参数传入。
    6. 返回末级分类数组。

    下面是一个示例代码:

    “`php
    function findEndLevelCategories($categories) {
    $endLevelCategories = array();

    foreach ($categories as $category) {
    if (!isset($category[‘children’])) {
    $endLevelCategories[] = $category;
    } else {
    $endLevelCategories = array_merge($endLevelCategories, findEndLevelCategories($category[‘children’]));
    }
    }

    return $endLevelCategories;
    }

    // 示例数据
    $categories = [
    [
    ‘id’ => 1,
    ‘name’ => ‘分类1’,
    ‘children’ => [
    [
    ‘id’ => 2,
    ‘name’ => ‘分类1-1’,
    ‘children’ => [
    [
    ‘id’ => 3,
    ‘name’ => ‘分类1-1-1’
    ],
    [
    ‘id’ => 4,
    ‘name’ => ‘分类1-1-2’
    ]
    ]
    ],
    [
    ‘id’ => 5,
    ‘name’ => ‘分类1-2’,
    ‘children’ => [
    [
    ‘id’ => 6,
    ‘name’ => ‘分类1-2-1’
    ],
    [
    ‘id’ => 7,
    ‘name’ => ‘分类1-2-2’
    ]
    ]
    ]
    ]
    ],
    [
    ‘id’ => 8,
    ‘name’ => ‘分类2’
    ]
    ];

    $endLevelCategories = findEndLevelCategories($categories);

    print_r($endLevelCategories);
    “`

    以上代码将返回以下结果:

    “`
    Array
    (
    [0] => Array
    (
    [id] => 3
    [name] => 分类1-1-1
    )

    [1] => Array
    (
    [id] => 4
    [name] => 分类1-1-2
    )

    [2] => Array
    (
    [id] => 6
    [name] => 分类1-2-1
    )

    [3] => Array
    (
    [id] => 7
    [name] => 分类1-2-2
    )

    [4] => Array
    (
    [id] => 8
    [name] => 分类2
    )

    )
    “`

    可以看到,返回的结果数组中只包含末级分类。

    2年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    要查询php无限级分类中的末级分类,可以按照以下步骤进行操作:

    1. 构建表结构:创建一个包含id、名称、父级id的分类表。其中id为主键,名称表示分类名称,父级id表示该分类的父级分类id。可以使用以下SQL语句创建表:
    “`sql
    CREATE TABLE category (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    parent_id INT
    );
    “`

    2. 插入数据:向分类表中插入分类数据。可以根据实际需要插入任意多个分类数据,其中父级id表示该分类的父级分类id。例如:
    “`sql
    INSERT INTO category (name, parent_id) VALUES (‘电子产品’, NULL);
    INSERT INTO category (name, parent_id) VALUES (‘手机’, 1);
    INSERT INTO category (name, parent_id) VALUES (‘相机’, 1);
    INSERT INTO category (name, parent_id) VALUES (‘苹果手机’, 2);
    INSERT INTO category (name, parent_id) VALUES (‘三星手机’, 2);
    “`

    3. 编写递归函数查询末级分类:通过递归函数查询末级分类。具体步骤如下:
    – 定义一个函数,接收一个分类id作为参数。
    – 在函数内部,首先查询该分类的子分类数量。如果子分类数量为0,则表示该分类为末级分类,将其添加到结果数组中。
    – 如果子分类数量不为0,则递归调用该函数,将子分类id作为参数,继续查询子分类的末级分类。
    – 返回结果数组。

    下面是一个示例代码实现:
    “`php
    function getLeafCategories($parentId = NULL) {
    // 查询该分类的子分类
    $query = “SELECT id FROM category WHERE parent_id = ?”;
    $stmt = $pdo->prepare($query);
    $stmt->execute([$parentId]);
    $children = $stmt->fetchAll(PDO::FETCH_COLUMN);

    $leafCategories = [];

    // 遍历子分类
    foreach ($children as $childId) {
    // 查询子分类的子分类数量
    $query = “SELECT COUNT(*) FROM category WHERE parent_id = ?”;
    $stmt = $pdo->prepare($query);
    $stmt->execute([$childId]);
    $count = $stmt->fetchColumn();

    // 如果子分类数量为0,表示该分类为末级分类
    if ($count == 0) {
    $leafCategories[] = $childId;
    } else {
    // 递归调用自身,查询子分类的末级分类
    $leafCategories = array_merge($leafCategories, getLeafCategories($childId));
    }
    }

    return $leafCategories;
    }
    “`

    4. 调用函数并获取结果:调用刚才编写的函数,传入根分类的id即可获取所有末级分类的id。例如:
    “`php
    $rootCategoryId = 1; // 根分类的id
    $leafCategories = getLeafCategories($rootCategoryId);
    print_r($leafCategories);
    “`

    以上就是查询php无限级分类中末级分类的方法和操作流程。通过递归函数,可以方便地获取无限级分类中的末级分类。

    2年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部