欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

把返回的数据集转换成数组树

程序员文章站 2022-04-22 19:11:00
...

$old = array(
array('id'=>1,'pid'=>0,'name'=>'第一个' ),
array('id'=>2,'pid'=>1,'name'=>'第二个' ) ,
array('id'=>3,'pid'=>2,'name'=>'第三个'),

);
print_r(list_to_tree($old,'id','pid','_child'));
输出如下
$old = array(
array(
'id'=>1,
'pid'=>0,
'name'=>'第一个',
'_child'=>array(
'id'=>2,
'pid'=>1,
'name'=>'第二个'
'_child'=>array('id'=>3,'pid'=>2,'name'=>'第三个'),
),
) ,

);
  1. /**
  2. * 把返回的数据集转换成Tree
  3. * @access public
  4. * @param array $list 要转换的数据集
  5. * @param string $pid parent标记字段
  6. * @param string $level level标记字段
  7. * @return array
  8. */
  9. function list_to_tree($list, $pk='id',$pid = 'pid',$child = '_child',$root=0) {
  10. // 创建Tree
  11. $tree = array();
  12. if(is_array($list)) {
  13. // 创建基于主键的数组引用
  14. $refer = array();
  15. foreach ($list as $key => $data) {
  16. $refer[$data[$pk]] =& $list[$key];
  17. }
  18. foreach ($list as $key => $data) {
  19. // 判断是否存在parent
  20. $parentId = $data[$pid];
  21. if ($root == $parentId) {
  22. $tree[] =& $list[$key];
  23. }else{
  24. if (isset($refer[$parentId])) {
  25. $parent =& $refer[$parentId];
  26. $parent[$child][] =& $list[$key];
  27. }
  28. }
  29. }
  30. }
  31. return $tree;
  32. }
复制代码