手记

使用数组实现PHP无限级分类

            点击(此处)折叠或打开

     

  1.   <?php
     

  2.   $cates = array(

  3.    array(

  4.     'cid' => 1,

  5.     'cname' => '新闻',

  6.     'pid' => 0

  7.    ),

  8.    array(

  9.     'cid' => 2,

  10.     'cname' => '通知',

  11.     'pid' => 0

  12.    ),

  13.    array(

  14.     'cid' => 3,

  15.     'cname' => '国内新闻',

  16.     'pid' => 1

  17.    ),

  18.    array(

  19.     'cid' => 4,

  20.     'cname' => '国际新闻',

  21.     'pid' => 1

  22.    ),

  23.    array(

  24.     'cid' => 5,

  25.     'cname' => '北京新闻',

  26.     'pid' => 3

  27.    ),

  28.    array(

  29.     'cid' => 6,

  30.     'cname' => '上海新闻',

  31.     'pid' => 3

  32.    ),

  33.    array(

  34.     'cid' => 7,

  35.     'cname' => '紧急通知',

  36.     'pid' => 2

  37.    ),

  38.    array(

  39.     'cid' => 8,

  40.     'cname' => '一般通知',

  41.     'pid' => 2

  42.    ),

  43.   );

  44.   /**
     

  45.    * 生成菜单

  46.    *

  47.    * @param array $data 原始数据

  48.    * @param integer $pid 当前分类的父id

  49.    * @return array 处理后数据

  50.    */

  51.   function createMenuTree($data = array(), $pid = 0)

  52.   {

  53.    if (empty($data))

  54.    {

  55.     return array();

  56.    }

  57.    static $level = 0;

  58.    $returnArray = array();

  59.    foreach ($data as $node)

  60.    {

  61.     if ($node['pid'] == $pid)

  62.     {

  63.      $returnArray[] = array(

  64.       'cid' => $node['cid'],

  65.       'cname' => $node['cname'],

  66.       'level' => $level

  67.      );

  68.      if (hasChild($node['cid'], $data))

  69.      {

  70.       $level++;

  71.       $returnArray = array_merge($returnArray, createMenuTree($data, $node['cid']));

  72.       $level--;

  73.      }

  74.     }

  75.    }

  76.    return $returnArray;

  77.   }

  78.   /**
     

  79.    * 检查是否有子分类

  80.    *

  81.    * @param integer $cid 当前分类的id

  82.    * @param array $data 原始数据

  83.    * @return boolean 是否有子分类

  84.    */

  85.   function hasChild($cid, $data)

  86.   {

  87.    $hasChild = false;

  88.    foreach ($data as $node)

  89.    {

  90.     if ($node['pid'] == $cid)

  91.     {

  92.      $hasChild = true;

  93.      break;

  94.     }

  95.    }

  96.    return $hasChild;

  97.   }

  98.   header('Content-Type: text/html; charset=utf-8');

  99.   $result = createMenuTree($cates);

  100.   foreach ($result as $row)

  101.   {

  102.    for ($i = 0; $i < $row['level']; $i++)

  103.    {

  104.     echo "t";

  105.    }

  106.    echo $row['cname'] . "n";

  107.   }

  108.   ?>

 

0人推荐
随时随地看视频
慕课网APP