<?php $cates = array( array( 'cid' => 1, 'cname' => '新闻', 'pid' => 0 ), array( 'cid' => 2, 'cname' => '通知', 'pid' => 0 ), array( 'cid' => 3, 'cname' => '国内新闻', 'pid' => 1 ), array( 'cid' => 4, 'cname' => '国际新闻', 'pid' => 1 ), array( 'cid' => 5, 'cname' => '北京新闻', 'pid' => 3 ), array( 'cid' => 6, 'cname' => '上海新闻', 'pid' => 3 ), array( 'cid' => 7, 'cname' => '紧急通知', 'pid' => 2 ), array( 'cid' => 8, 'cname' => '一般通知', 'pid' => 2 ), ); /** * 生成菜单 * * @param array $data 原始数据 * @param integer $pid 当前分类的父id * @return array 处理后数据 */ function createMenuTree($data = array(), $pid = 0) { if (empty($data)) { return array(); } static $level = 0; $returnArray = array(); foreach ($data as $node) { if ($node['pid'] == $pid) { $returnArray[] = array( 'cid' => $node['cid'], 'cname' => $node['cname'], 'level' => $level ); if (hasChild($node['cid'], $data)) { $level++; $returnArray = array_merge($returnArray, createMenuTree($data, $node['cid'])); $level--; } } } return $returnArray; } /** * 检查是否有子分类 * * @param integer $cid 当前分类的id * @param array $data 原始数据 * @return boolean 是否有子分类 */ function hasChild($cid, $data) { $hasChild = false; foreach ($data as $node) { if ($node['pid'] == $cid) { $hasChild = true; break; } } return $hasChild; } header('Content-Type: text/html; charset=utf-8'); $result = createMenuTree($cates); foreach ($result as $row) { for ($i = 0; $i < $row['level']; $i++) { echo "t"; } echo $row['cname'] . "n"; } ?>