乐趣区

关于php:PHP数组转树状结构的两种方法递归引用

递归

/**
     * 数组转树状构造
     * @param  arr       $list      要转换的数据
     * @param  int       $pid       父级 ID
     * @param  str       $pid_field 父级字段名
     * @param  str       $id_field  主键名
     */
    function getTree($list, $pid=0, $pid_field='pid', $id_field='id'){$result=[];
        foreach ($list as $k => $v) {if($list[$k][$pid_field] == $pid){unset($list[$k]);
                $children = getTree($list,$v[$id_field]);
                if($children){$v['children'] = $children;
                }
                $result[]=$v;}
        }
        return $result;
    }

援用

/**
     * 数组转树状构造
     * @param  arr       $list      要转换的数据
     * @param  str       $pid_field 父级字段名
     * @param  str       $id_field  主键名
     */
    function getTree($list, $pid_field='pid', $id_field='id'){$items=[];
        foreach ($list as $k => $v) {$items[$v[$id_field]]=$v;
        }
        $tree=[];
        foreach ($items as $k => $v) {if(isset($items[$v[$pid_field]])){$items[$v[$pid_field]]['children'][]=&$items[$k];
            }else{$tree[]=&$items[$k];
            }
        }
        return $tree;
    }
退出移动版