无限极分类管理之数据查询和有序整理

在使用无限极分类管理数据的技术的时候,我们常常面临一些必要的麻烦。棋种最重要也是最基本的就是怎么把查出的信息整理好。比如把信息分类,子类信息要放到父类信息中,实现嵌套,从而让查询出来的数据有序化,便于后续的使用。这个过程个人理解为序列化(跟前端表单提交数据的序列化没有联系)—-将杂乱的数据信息通过内在的联系整理为有序,有规则的有序数组的过程。
举个例子:
数据库中有以下数据:
无限极分类管理之数据查询和有序整理_第1张图片
通过php查询出来是二位数组:

//php查询代码:
$rs = array();
$type = array();
//查找出数据库中所有的数据,放入数组中保存。后续所有查找都在在数组中进行。
$sql = 'select * from type  ' ;
$rs = mysql_query( $sql );
while( $row = mysql_fetch_array( $rs ,MYSQL_ASSOC) )
{
    $type[$row['id']] =  $row ;
}

打印结果:
无限极分类管理之数据查询和有序整理_第2张图片

可以看到这样的数据使用并不是很方便,特别是在类型关系的展现上显得凌乱。
我们希望的数组形式应该是:
无限极分类管理之数据查询和有序整理_第3张图片

//php
 *   [1]=>[
 *          []=>[],
 *          []=>[]
 *          ]
 *   [2]=>[
 *  `       []=>[];
 *          []=>[
 *                  []=>[]
 *              ]
 *          ]
 *  第一级  第二级   第三级
    [] =[
            [1]=>[
                    ['吴国'],
                    ['sub']=>[
                            ['孙权'],
                            ['陆逊'],
                        ]
                    ],
            [2]=>[
                ['魏国'],
                ['sub']=>[
                        ['曹操'],
                    ]
                ],
            [3]=>[
                ['蜀国'],
                ['sub']=>[
                        ['刘备'],
                    ]
                ]   
        ]   
//         第一层   第二层   第三层

为了得到以上格式的数据。需要经过2个步骤。
第一查询数据。只要有id就能找到这个id所对应的数组。

//php代码
//在数组中查找指定的id
function  findPid ( $pid = 1 , & $arr = array() ,$boo = false ,$a =array()  )
{
    if( is_array( $arr ) )
    {
        foreach ( $arr as $k=>  $v )
        {
            if (  $k == $pid )
            {
                //echo "这是{$k}的
";
// print_r( $v ); if( ! $boo ) { //$boo是false表示只找 return $arr[$k]; } else { if( isset( $arr[$k]['sub'] ) ) { //有子类型 $arr[$k]['sub'] [$a['id']] = $a ; } else { //没有子类型 $arr[$k]['sub'] = array() ; $arr[$k]['sub'] [$a['id']] = $a ; } return true; } } else { if( isset( $v['sub'] ) ) { findPid( $pid , $v ,$boo ,$a);//递归 } } } } else { return false; } }

第二步将子类型的数组和父类型数组合并。
比如:将元素曹操放到魏国类型下面。并在魏国数组中创建’sub’属性,其内容为元素的pid为魏国的id。

//php
function   getLeaderArray( $array = array() )
{
    $leaderArray = array ();
    if( is_array( $array )  )
    {
        //必须是数组
        foreach ( $array as $k=> $v  )
        {
            if( $v['pid'] == 0 )
            {
                //顶层数组保留
                $leaderArray[$k] = $v ;
            }
            else
            {
                //否则要放到其父类型的'sub'属性里面
               if( findPid( $v['pid'] , $leaderArray  , true , $array[$k]  ))//找到父类型添加进父类型或者没找到
               {
                    //子类型添加完成
               }
                else
                {
                    //在数组中没有找到
                    // 自动将改父类型补充为顶层元素
                    $leaderArray[$v['pid']] = [
                                                                        'id'=> $v['pid'],
                                                                'pid'  =>0,
                                                                'name'=>'',
                                                                'sub'=> [
                                                                           $k=> $array[$k]
                                                                        ]
                                                ];
                }
            }
        }
        return $leaderArray;
    }
    else
    {
        return $array;
    }
}

经过以上2个步骤,数组可以整理得到如下形式:
无限极分类管理之数据查询和有序整理_第4张图片

你可能感兴趣的:(总结,php,mysql数据库,后端开发,web开发)