php递归无限极分类

递归无限级分类有几种形式,我这里只举例比较常用的三种:

第一种:返回有排序的数组:

<?php

$data = array(
    1 => array(
        'id' => 1,
        'pid' => 0,
        'user_name' => 'one',
    ),
    2 => array(
        'id' => 2,
        'pid' => 1,
        'user_name' => 'two',
    ),
    3 => array(
        'id' => 3,
        'pid' => 1,
        'user_name' => 'two',
    ),
    4 => array(
        'id' => 4,
        'pid' => 2,
        'user_name' => 'three',
    ),
    5 => array(
        'id' => 5,
        'pid' => 2,
        'user_name' => 'three',
    ),
    6 => array(
        'id' => 6,
        'pid' => 5,
        'user_name' => 'four',
    ),
);

function genCate( $data, $pid = 0, $level = 0 ) {
    static $result = array();
    $result = ($level == 0) ? array() : $result;
    $prefix = ($level == 0) ? '' : str_repeat( '-', $level );
    foreach ( $data as $key => $row ) {
        if ( $row['pid'] == $pid ) {
            $row['user_name'] = $prefix . $row['user_name'];
            $result[] = $row['user_name'];
            genCate( $data, $row['id'], $level + 1 );
        }
    }
    return $result;
}

echo '<pre>';
$result = genCate( $data );
print_r( $result );
exit;
?>

第二种:返回html字符串形式:

function getTreeHtml( $data, $pId ) {
    $html = '';
    foreach ( $data as $k => $v ) {
        if ( $v['pid'] == $pId ) { 
            $html .= "<li>" . $v['user_name'];
            $html .= getTree( $data, $v['id'] );
            $html = $html . "</li>";
        }
    }
    return $html ? '<ul>' . $html . '</ul>' : $html;
}

第三种:返回多维数组形式:

function getTreeArray( $data, $pId = 0 ) {
    $tree = array();
    foreach ( $data as $key => $value ) {
        if ( $value['pid'] == $pId ) {
            $value['childrens'] = getTreeArray( $data, $value['id'] );
            $tree[] = $value;
        }
    }
    return $tree;
}



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值