排序无限级分类的这种结构数据



解决无限级分类的这种结构数据;

原始数据:从数据库获取$ar;

整理后的数据:reSort($ar);

字段:id(分类id,下面用i表示)、pid(父分类id,下面用pi表示)、name(分类名称,下面用n表示)

注意:从数据库获取的数据必须以id作为key,如$ar;



方法如下:

<?php

$ar = array(
    1 => array(
        'i' => '1','pi'=>0,'n'=>'01',
    ),
    3 => array(
        'i' => '3','pi'=>0,'n'=>'03',
    ),
    2 => array(
        'i' => '2','pi'=>1,'n'=>'12',
    ),
    5 => array(
        'i' => '5','pi'=>1,'n'=>'15',
    ),
    4 => array(
        'i' => '4','pi'=>1,'n'=>'14',
    ),
    6 => array(
        'i' => '6','pi'=>2,'n'=>'26',
    ),
);

/**
 * 获取$ar[$i]的整个父级关系
 */
function getTip($ar, $i, $a=array()){
    $pi = $ar[$i]['pi'];
    $a[] = $pi;
    if($pi != 0){
        $i = $pi;
        return getTip($ar, $i, $a);
    }else{
        return $a;
    }
}

/**
 * 对$ar进行树形排序
 */
function reSort($ar){
    $r = array();
    foreach ($ar as $t){
        $i = $t['i'];
        $tip = getTip($ar, $i);
        $length = count($tip)-1;
        $k = '$r';
        for ($j=$length; $j>=0; $j--){
            $k .= '['.$tip[$j].']';
        }
        $k .= '['.$i.']=$ar["$i"];';
        eval($k);
    }
    return $r;
}

print_r(reSort($ar));
die;


返回的结果如下


Array
(
    [0] => Array
        (
            [1] => Array
                (
                    [i] => 1
                    [pi] => 0
                    [n] => 01
                    [2] => Array
                        (
                            [i] => 2
                            [pi] => 1
                            [n] => 12
                            [6] => Array
                                (
                                    [i] => 6
                                    [pi] => 2
                                    [n] => 26
                                )

                        )

                    [5] => Array
                        (
                            [i] => 5
                            [pi] => 1
                            [n] => 15
                        )

                    [4] => Array
                        (
                            [i] => 4
                            [pi] => 1
                            [n] => 14
                        )

                )

            [3] => Array
                (
                    [i] => 3
                    [pi] => 0
                    [n] => 03
                )

        )

)




转载于:https://my.oschina.net/liuxiaobo/blog/225502

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值