递归
/** * 数组转树状构造 * @param arr $list 要转换的数据 * @param int $pid 父级ID * @param str $pid_field 父级字段名 * @param str $id_field 主键名 */ function getTree($list, $pid=0, $pid_field='pid', $id_field='id'){ $result=[]; foreach ($list as $k => $v) { if($list[$k][$pid_field] == $pid){ unset($list[$k]); $children = getTree($list,$v[$id_field]); if($children){ $v['children'] = $children; } $result[]=$v; } } return $result; }
援用
/** * 数组转树状构造 * @param arr $list 要转换的数据 * @param str $pid_field 父级字段名 * @param str $id_field 主键名 */ function getTree($list, $pid_field='pid', $id_field='id'){ $items=[]; foreach ($list as $k => $v) { $items[$v[$id_field]]=$v; } $tree=[]; foreach ($items as $k => $v) { if(isset($items[$v[$pid_field]])){ $items[$v[$pid_field]]['children'][]=&$items[$k]; }else{ $tree[]=&$items[$k]; } } return $tree; }