$data) { $_key = is_object($data)?$data->$pk:$data[$pk]; $refer[$_key] =& $list[$key]; } foreach ($list as $key => $data) { // 判断是否存在parent $parentId = is_object($data)?$data->$pid:$data[$pid]; $is_exist_pid = false; foreach($refer as $k=>$v) { if($parentId==$k) { $is_exist_pid = true; break; } } if ($is_exist_pid) { if (isset($refer[$parentId])) { $parent =& $refer[$parentId]; $parent[$child][] =& $list[$key]; } } else { $tree[] =& $list[$key]; } } } return $tree; } /** * 将格式数组转换为树 * * @param array $list * @param integer $level 进行递归时传递用的参数 */ private $formatTree; //用于树型数组完成递归格式的全局变量 private function _toFormatTree($list,$level=0,$title = 'title') { foreach($list as $key=>$val) { $tmp_str=str_repeat("  ",$level*2); $tmp_str.=""; $val['level'] = $level; $val['title_show'] = $tmp_str.$val[$title]; if(!array_key_exists('_child',$val)) { array_push($this->formatTree,$val); } else { $tmp_ary = $val['_child']; unset($val['_child']); array_push($this->formatTree,$val); $this->_toFormatTree($tmp_ary,$level+1,$title); //进行下一层递归 } } return; } public function toFormatTree($list,$title = 'title') { $list = $this->toTree($list); $this->formatTree = array(); $this->_toFormatTree($list,0,$title); return $this->formatTree; } public function toNameFormatTree($list,$title = 'name') { $list = $this->toTree($list); $this->formatTree = array(); $this->_toFormatTree($list,0,$title); return $this->formatTree; } } ?>