日期:2014-05-17  浏览次数:20398 次

三级分类不递归是怎样实现的呢 (附测试代码) 求解
本帖最后由 anydy2008 于 2013-01-06 12:07:44 编辑
看了几天前的一个帖子  
http://bbs.csdn.net/topics/390331161
当中有snmr_com 的热心回复,提到不递归实现分类的方法。

我就想,按照这个逻辑可否将类别实现树形数组结构呢。
下面是我用递归形式生成的  代码如下:

<?
$arr = array(
    
    array('id'=>1,'city_name'=>'中国','rel_id'=>'1','pid'=>0),
    array('id'=>2,'city_name'=>'广东','rel_id'=>'1-2','pid'=>1),
    array('id'=>3,'city_name'=>'深圳','rel_id'=>'1-2-3','pid'=>2),
    array('id'=>4,'city_name'=>'广州','rel_id'=>'1-2-4','pid'=>2)
   
);

function find_subclass( $pid ){
    
    global $arr;
    $__arr = array();
    foreach ( $arr as $k=>$v )
    {
        
        if( $v['pid']==$pid )$__arr[] = $v;
        
    }
    return $__arr;
    
}

function tree_subclass($pid=0){
    
    $__arr = array();
    $__arr = find_subclass($pid);
    if( !empty($__arr) ){
        
        foreach ( $__arr as $k=>$v )
        {

            $__arr[$k]['subclass'] = tree_subclass($v['id']);
            
        }
        
    }
    return $__arr;
}

var_dump(tree_subclass(0));

?>




期望通过不递归的形式得到的数组结构:


array(1) {
  [0]=>
  array(5) {
    ["id"]=>
    int(1)
    ["city_name"]=>
    string(4) "中国"
    ["rel_id"]=>
    string(1) "1"
    ["pid"]=>
    int(0)
    ["subclass"]=>
    array(1) {
      [0]=>
      array(5) {
        ["id"]=>
        int(2)
        ["city_name"]=>
        string(4) "广东"
        ["rel_id"]=>
        string(3) "1-2"
        ["pid"]=>
        int(1)
        ["subclass"]=>
        array(2) {
          [0]=>
  &