php递归无限极分类

来源:互联网 发布:单片机开发系统pcb论文 编辑:程序博客网 时间:2024/05/09 05:23

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

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

<?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 0
原创粉丝点击