PHP函數之無極分類


  無極分類屬於現在比較難攻克的一關,現在就把代碼貼出來,有需要的朋友可以根據實際需要擴展一下。

  //假設分類關系為“ 地球”(id為1,父id為0),“國家”(id為2,父id為1),“省份”(id為5,父id為2),城市(id為9,父id為5),地區(id為14,父id為9)

<?php
//獲取子分類
function getChildId($parentid=0)      //形參傳入父id,方便抓取子分類數組。
{
    mysql_connect("localhost","root","");  
    mysql_query("set names utf8");
    $sql="select * from `category` where parentid='{$parentid}' limit 100"; //從數據表 ·分類· 中,根據父id的值抓取一組子分類。默認值為0,故抓取到的為地球。
    $result=mysql_query($sql);
    $results=array();                          //聲明一個空數組,方便裝入子分類。
    while($child=mysql_fetch_assoc($result))              //通過while循環抓取返回給$child
    {
        $results[]=$child;                               //把子分類組里的數據插入到$results這個數組中
    }
    return $results;                                     //把結果返回給函數,默認為一個包含地球的組。
}

//函數getChildId()返回的是子分類數組


function getTree($parentid=0,$treeArray=array())
{
    $child = getChild($parentid);                      //返回的是形參輸入的父id下面的子分類組,默認為一個包含國家的組。
    foreach($child as $baby)                        //$baby此時為一個一個的國家
    {
        $treeArray[]=$baby;                       //將默認傳入的一個空數組裝入子分類的數據,首先轉入的為地球。 
        $treeArray = getTree($baby['id'],$treeArray);           //函數回調,形成一個循環。當$child的值為0時,即父id下面沒有子分類時。跳過foreach語句,直接執行下一句
        
    }
    return $treeArray;                          //return裝着子分類的數組,返回給函數,
}
//運行函數 返回$treeArray;
$tree = getTree();
var_dump($tree);
?>

  下面再來看一段新的代碼:


header('Content-Type:text/html;charset=utf-8');     //告訴瀏覽器用utf-8編碼閱讀

mysql_connect("localhost","root","");
mysql_select_db("cms4");
mysql_query("set names utf8");

 

function getList($pid = 0)                 //抓取子分類的函數
{
    //按新聞分類表的  父id查找 子分類列表
    $sql = "select * from news_categorys where pid = '{$pid}' limit 100";
    $query = mysql_query($sql);
    if(!$query)
    {
        //有錯報錯
        die(mysql_error());
    }
    $lists = array();
    //在結果集里取一行
    while($row = mysql_fetch_assoc($query))
    {
        $lists[] = $row;
    }
    return $lists;
}

//獲得所有分類的數組


function getTree($pid = 0,$typeTree = array(),$level = 0)

{

    $list = getList($pid);            //獲取默認父id為0的子分類

  var_dump($list);              //將子分類輸出
                          
    foreach($list as $l)

{                        //當$list是空數組時,foreach不會執行
        
     $levelStr = '<font color="red">';
     for($i=0;$i<$level;$i++)

  {
       $levelStr.='|-';
  }
          $levelStr .= '</font>';                //$levelStr = $levelStr.'</font>'
          $l['name'] = $levelStr.$l['name'];
          $typeTree[] = $l;
 
        //逐層深入遞歸
        $typeTree = getTree($l['id'],$typeTree,$level+1);    //獲取下一級分類
                                    //$level 指子分類層級
    }
    return $typeTree;
}
$tree = getTree();                    //將所有父和子分類賦值給$tree
//var_dump($tree);


foreach ($tree as $v)              
{
    echo $v["name"]."<br />";               //
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM