php tree结构,PHP树形结构无限级分类

返回数据是一维数组的代码(以上方法只是进行了排序,并不会对数组结构进行改变):

public function get_all_data()

{

//TP框架查询所有数据:

//$data = (new UserModel)->select();

//Laravel 框架查询所有数据:

$data = (new UserModel)->get();

$res = $this->sort_data($data);

dump($res);

}

public function sort_data($data, $pid = 0, $root = 1)

{

static $new_data = [];

//循环遍历传递过来的数据

foreach ($data as $key => $value) {

//判断数据的上级 ID 是否等于当前 ID,最顶级 ID 为 0

//这里的上级 ID 在数据库中的字段为 parent_id

if ($value['parent_id'] == $pid) {

$new_data[] = $value;

$value['root'] = $root;

// 去掉已经处理过的数据,这一步是关键,可以提高效率

unset($data[$key]);

//使用当前数据记录的 ID 进行再次循环排序

$this->sort_data($data, $value['id'], $root + 1);

}

}

return $new_data;

}

有时候还会需要对数据进行修改结构。比如使用 Layui 的树形组件,就会有这样的数据格式要求:

public function sort_data($data, $pk = 'id', $pid = 'pid', $child = 'children', $root = 0)

{

// 创建Tree

$tree = [];

if (!is_array($data)) {

return false;

}

//创建基于主键的数组引用

$refer = [];

foreach ($data as $key => $value_data) {

$refer[$value_data[$pk]] = &$data[$key];

}

foreach ($data as $key => $value_data) {

// 判断是否存在parent

$parentId = $value_data[$pid];

if ($root == $parentId) {

$tree[] = &$data[$key];

} else {

if (isset($refer[$parentId])) {

$parent = &$refer[$parentId];

$parent[$child][] = &$data[$key];

}

}

}

return $tree;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值