数据表关系:第一级:father=0;下级列表:father=id
$con = mysql_connect("localhost","root","root");
if (!$con){
die('数据库连接失败: ' . mysql_error());
}else{
mysql_query("SET NAMES UTF8");
mysql_query("set character_set_client=utf8");
mysql_select_db("shuj", $con);
$sql = "SELECT * FROM toa_department WHERE jituanid=7";
$res = fetch_all($sql);
//获取树形data
$tree = get_tree($res);
$msg = array();
$msg['tree_data'] = $tree;
$output = json_encode($msg);
print_r($output);
}
mysql_close($con); //关闭数据库
//方法封装
function fetch_all($sql) {
$result = array();
$query = mysql_query($sql);
while($row = mysql_fetch_assoc($query)) {
$result[] = $row;
}
return $result;
}
//无限极递归方法
function get_tree($data, $pId=0)
{
$tree = array();
foreach($data as $k => $v)
{
if($v['father'] == $pId)
{ //父亲找到儿子
$v['children'] = get_tree($data, $v['id']);
$tree[] = $v;
}
}
return $tree;
}
//children有数据才显示
function tree_children($data, $pId=0)
{
$tree = array();
foreach($data as $k => $v)
{
if($v['pid'] == $pId)
{
$child = tree_children($data, $v['id']);
if (count($child)) {
$v['children'] = $child;
}
$tree[] = $v;
}
}
return $tree;
}
//引用方法
function getTree($list, $pid = 0)
{
$tree = [];
if (!empty($list)) { //先修改为以id为下标的列表
$newList = [];
foreach ($list as $k => $v) {
$newList[$v['id']] = $v;
}
//然后开始组装成特殊格式
foreach ($newList as $key=>$value) {
if ($pid == $value['pid']) {//先取出顶级
$tree[] = &$newList[$value['id']];
}elseif (isset($newList[$value['pid']])){//再判定非顶级的pid是否存在,如果存在,则再pid所在的数组下面加入一个字段items,来将本身存进去
$newList[$value['pid']]['children'][] = &$newList[$value['id']];
}
}
}
return $tree;
}
//其他方法
//结合html
function Tree2($data, $pId=0)
{
$html = '';
foreach($data as $k => $v)
{
if($v['father'] == $pId)
{ //父亲找到儿子
$html .= "<li>".$v['name'];
$html .= Tree2($data, $v['id']);
$html = $html."</li>";
}
}
return $html ? '<ul>'.$html.'</ul>' : $html ;
}
//分隔符显示
function Tree_sort($data, $pId=0,$t=-1)
{
$t++;
global $temp;
foreach($data as $k => $v)
{
if($v['father'] == $pId)
{ //父亲找到儿子
$v['name'] = str_repeat(' ',$t*3).'|--'.$v['name'];
$temp[] = $v;
Tree_sort($data,$v['id'],$t);
}
}
return $temp;
}
//将树形结构转为非树形
function trim_deep($tree){
static $arr = [];
foreach($tree as $k => $v){
if(is_int($k) && is_array($v)){
if(array_key_exists('id',$v)){
$tmp = $v;
$tmp['children'] = null;
$arr[] = $tmp;
if(!empty($v['children'])) trim_deep($v['children']);
}
}
}
return $arr;
}