php无限极分类_php无限级分类(带层深)算法

更新时间:2017-11-22    来源:php常用代码    手机版     字体:

【www.bbyears.com--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";
}
?>

本文来源:http://www.bbyears.com/jiaocheng/37226.html

猜你感兴趣