关于php迭代循环(无限分类)

本文探讨了如何在PHP中处理无限分类的问题,强调了良好的代码注释和格式规范的重要性。作者提出,对于无限分类,数据库中的数据通常包含cate_id、parent_id和has_child字段。实现目标是将多维数组转换为一维数组,并通过额外字段处理缩进,以展示层次结构。文章概述了从数据库获取数据并构建所需效果的两个主要步骤:创建多维数组和将其转换为一维数组。
摘要由CSDN通过智能技术生成

看了四年之前写的关于迭代循环的一片文章,已经完全看不懂了,不是逻辑难,而是没有注释,格式不规范,各种不细心,而且没有思路讲解,让人一头雾水。好的介绍是什么?让人看注释就能明白你要干什么,甚至都不用看代码

先说思路吧:这是一个关于分类的方法,无限分类。也就是说不知道有多少层关系,比如家居->厨房用具->炒锅->苏泊尔这是有四层,家居->门窗->大帝门窗这个有三层,也就是说层级不确定,那要求实现什么样的效果呢?要求列表显示,带有缩进。也就是


数据库中的数据基本的是cate_id和parent_id,以及判断该分类是否有子分类的has_child字段

总体思路:这类信息从数据库中取出来按照分类排序的话肯定是多维数组,因为是层级关系。但要实现我们想要的效果要搞成一维数组。那么问题来了,搞成一维的,如何缩进呢?再加一个字段,表示缩进。那么问题来了,现在实现想要的效果需要两部。第一:从数据库中读取数据按照层级关系放进多维数组中。第二:将多维数组按照层级关系转换成一维数组,并带有缩进标示。

这里我只写总体的代码

<?php
/**
 * Created by PhpStorm.
 * User: zhuxinlei
 * Date: 14-6-10
 * Time: 下午10:24
 */
class abc
{
    public function getchild($id = 0)
    {

        return $this->where('parent_id = ' . $id)->select();
    }

    public function build_tree($id = 0)
    {
        //获取子分类信息
        $child = $this->getchild($id);
        //如果是没有子分类的话返回Null
        if (empty($child)) {
            return null;
        }
        //遍历父类(因为子类的话已经返回null),再次调用本方法,将重新获得的子类信息赋值给父类的child字段
        //唯一一个有点思维难度的是不断赋值给$child,$child不会被覆盖吗?不会,因为每次调用的都是新方法里的变量
        foreach ($child as $k => $val) {
            $tree = $this->build_tree($val['cate_id']);
            if($tree != null){
                $child[$k]['child'] = $tree;
            }
        }
        return $child;

    }

    public function rebuild_tree($tree){
        //静态变量的值不会被覆盖,会叠加
        static $tmp;
        foreach($tree as $k=>$val){
            if(is_array($val)){
                $this->rebuild_tree($val);
            }else{
                $tmp[] = $val;
            }
        }
        return $tmp;
    }

    public function getlist()
    {
        //此时tree为多维数组
        $tree = $this->build_tree(0);
        //此时rebuild_tree已经转化为一维数组
        $rebuild_tree = $this->rebuild_tree($tree);
    }
}
?>









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值