程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php無限級分類(帶層深)算法

php無限級分類(帶層深)算法

編輯:關於PHP編程

一個利用數組來實現無限級分類php類程序,有需要的朋友可參考,這裡就不多說什麼了直接復制上代碼。  代碼如下 復制代碼


<?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";
}
?>


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved