php+mysql 查询获取无限低级排序树结果的示例
该示例讲述了 php+mysql 查询获取无限低级排序树结果的过程。分享给大家,供大家参考,具体如下:
这里输入的PHP用MySQL查询无限下属树输出,真的是无限排序。我为您收集了几个无限 PHP 定制的示例。
树输出:
function get_array($user_id,$top=0){
global $mysql,$_G;
$sql = "select user_spread as p_user`s_name .spreads_userid='{ $ user_id} '";
$rows= $mysql->db_fetch_arrays($sql);
if($top==1){
$arr[0]['name']=$user_id ;
$arr[0]['children']=array();
}
$top=$top+1;
foreach ($rows as $key= >$value)
{
$r = get_array($value['name']); //调用函数,传递参数,继续请求下层
$arr[0]['child'][$key]['name']= $value['name']; //复合数组
if(is_array($r)){
$arr[0]['child'][$key]['child']= $r[0]['child'];
}
$i++;
}
return $arr;
}
$list = get_array",("10000",("); //调用1000为最上面number
echo 'var data='.json_encode($list);
这是Output Array,然后转为json
示例:
系统表:id字段为分类标识符,名称field是类别的名称,parent_id字段是其父类别的id,path字段是类别路径,存储类别的祖先集合,isdir指定是否是目录,1表示是,0表示不。sort_list($str,$fatherid,$count)
{
$rs = $this->sql->re_datas("从排序中选择*,其中father_id =fatherid");$ = $this->sql->sql_numrows();
$i=0;
$n = 1;
while(isset($rs[$i]))
${
名称 = "";
for($n = 1 ; $n {
$name.="│ ";
}
if($i if 1==$num)
{
$name.="└─".$rs[$i][name];
}
else
${ ="├─".$rs[$i][名称];
}
if($rs[$i][isdir])
{
$str.="".$name."";
}
else
{
$str.=$name";
} $temp = $count 1;
$str = $this->sort_list($str,$rs[$i][id],$temp);
$i ;
}
return $str ;
}
$this->sql对象为sql操作类对象,re_datas()函数返回查询的数组,sql_numrows()函数返回请求的数量。
:
$sort_list = sort_list ($sort_list,0,1);
示例:
Table:category
id int 主键,自增 ♷ name
pid int 父类 id ,默认为0
顶级类别的默认pid是0。当我们要删除某个类别的子类别树时,主要思路就是重置。当然,由于问题的有效性,不建议每次重复都询问数据。通常的方法是先把所有的类别去掉,存到一个PHP数组中,然后进行处理,最后还可以缓存结果以提高后续请求的性能。
首先我们创建第一个数组,可以直接从数据库中检索:
$categories = array(
array('id'= >1,'name'=>'computer',' pid ' =>0),
array('id'=>2,'name'=>'电话','pid' =>0),
array('id'=>3,'name ' => '笔记本电脑','pid' =>1),
array('id'=>4,'名称' =>'台式机', 'pid' =>1),
array(' id ' => 5,'name' => '智能手机', 'pid' => 2),
array('id' =>6, 'name' => '功能机', 'pid' => 2 ),
array('id'=>7,'name'=>'超极本','pid'=>3),
array('id'=>8,'name'=>'游戏本','pid' =>3),
);
目标是将其转换为以下内容:
- 计算机—笔记本
- ——-ultrabook
- ——-游戏笔记本
- —桌面
- 移动
- —智能手机
- —如果数组代表
机器,可以添加子键来存储其子类别:
array(
//1匹配id,方便直接读取
1 => array (
'id'=>1,
'名称'=>'计算机',
'pid'=>0,
child=>数组( &array(( ) 'id'=>3,
'name'=>'笔记本',
'pid'=>1,
'child'=>数组(
// )
),
&array(
'id'=>4,
'名称'=>'桌面',=,=, '=' > array(
/ /将留在这里)
),
)
),
//获取步骤
:
$tree = array( );
//该第一步是使用类别 id 作为数组的键并创建子组
foreach($categories as $category){
$tree[$category [' id' ]] = $category;
$tree[$category['id']]['children'] = array();
}
//第二部分使用引用打开每个类别并将其添加到父类的子数组中,从而在一个方向上创建一棵树结构。
foreach ($k=>$item 的 $tree) {
if ($item['pid'] != 0) {
$tree[$item['pid']]['child '][] = &$tree[$k];
}
}
print_r($tree);输出如下:
Array
(
[1] => Array
(
[id] => 1
[name][name] pid ] = > 0
[子项] => 数组
(
[ 0 ] =>数组
(
[id] => 3
[名称] => 笔记本
[pid] => 1
[子] => 数组
(
( => 数组[ 0] => 数组[0] (
[id] => 7
[名称] => 超级本
[pid] => 3
[子项] => 数组 ((♷ )
[1] => 数组
(
[id] => 8
[名称] => 剧本
[pid] => 3 [] = >数组 []
(
)
)
)
)
[1] => 数组
() ) [名称] => 桌面
[pid] => 1
[子] => 数组
(
)
)
)
) 父亲
(
[id] => 2
[name] => 手机
[pid] => 0
[child] => 数组
(
() (
( > 数组
(
[id] => 5
[名称] => 智能手机
[pid] => 2
[子项)] = > 数组♷♷
)
[1] => 数组♷(
[id] => 6
[名称] => 功能电话
(
[id] => 6
[名称] => 功能电话 => => [pid ] => 数组
(
)
)
)
)
[3] => 数组♷♷(3) => ♷
[名称] => 笔记本
[pid] => 1
[子项] => 数组
(
[0] => 数组
(
([]= > 7[名称] => 超级本
[pid] => 3
[子] => 阵列
(
)
)
)
() [ id] => 8
[名称] => 剧本
[pid] => 3
[子] => 数组
(‷)♷♷)♷♷ )
)
[4] => 数组
(
[id] => 4
[名称] =>
[子] => 数组
(
)
)
[5] => 数组
(
[id]♷ => 5 [id]♷ => 5
[pid] => 2
[ id]♷ [子项] => 数组
(
)
)
[6]♷ => [6‷ => 数组 id] = > 6
[名称] => 机器工作
[pid] => 2
[child] => 数组
(
)
)
数组
(
[id] => 7
[名称] => 超级本
[pid] => 3
[子] => 数组♷(♷)” )
[8] => 数组 ♷(
[id] => 8
[name] => Gamebook
[pid] = 也减少了。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。