收藏PHP将数组转换成树形层级结构以及树形结构还原成数组

如题,文中的代码来源于网络,并标明了作者。以下两个代码片段主要作用是将数组转换成具备层级的树形结构以及层级结构的数据还原成数组。

代码片段:

  1. /**
  2.  * 把返回的数据集转换成Tree
  3.  * @param array $list 要转换的数据集
  4.  * @param string $pid parent标记字段
  5.  * @param string $level level标记字段
  6.  * @return array
  7.  * @author 麦当苗儿 <[email protected]>
  8.  */
  9. function list_to_tree($list$pk = 'id', $pid = 'pid', $child = 'children', $root = 0)
  10. {
  11.     // 创建Tree
  12.     $tree = array();
  13.     if (is_array($list)) {
  14.         // 创建基于主键的数组引用
  15.         $refer = array();
  16.         foreach ($list as $key => $data) {
  17.             $refer[$data[$pk]] = &$list[$key];
  18.         }
  19.         foreach ($list as $key => $data) {
  20.             // 判断是否存在parent
  21.             $parentId = $data[$pid];
  22.             if ($root == $parentId) {
  23.                 $tree[] = &$list[$key];
  24.             } else {
  25.                 if (isset($refer[$parentId])) {
  26.                     $parent           = &$refer[$parentId];
  27.                     $parent[$child][] = &$list[$key];
  28.                 }
  29.             }
  30.         }
  31.     }
  32.     return $tree;
  33. }
  34. /**
  35.  * 将list_to_tree的树还原成列表
  36.  * @param  array $tree 原来的树
  37.  * @param  string $child 孩子节点的键
  38.  * @param  string $order 排序显示的键,一般是主键 升序排列
  39.  * @param  array $list 过渡用的中间数组,
  40.  * @return array        返回排过序的列表数组
  41.  * @author yangweijie <[email protected]>
  42.  */
  43. function tree_to_list($tree$child = 'children', $order = 'id', &$list = array())
  44. {
  45.     if (is_array($tree)) {
  46.         $refer = array();
  47.         foreach ($tree as $key => $value) {
  48.             $reffer = $value;
  49.             if (isset($reffer[$child])) {
  50.                 unset($reffer[$child]);
  51.                 tree_to_list($value[$child], $child$order$list);
  52.             }
  53.             $list[] = $reffer;
  54.         }
  55.         $list = list_sort_by($list$order$sortby = 'asc');
  56.     }
  57.     return $list;
  58. }

 

你想把广告放到这里吗?

发表评论

您必须 登录 才能发表留言!