關於無限分類是在兄弟連的視頻中看過,知道基本思想,感覺很簡單,自己肯定會;經過電魂筆試後,才發現看似簡單的題目不經過自己親自做一遍,是不知道自己是不是真正會做。
基本思想是用遞歸實現,但是就這麼個簡單的算法我調試了一個上午(用PHP寫的),始終沒找到自己的錯誤,最後才發現是因爲var_dump()打印數組的時候,當數組過多或者維度過大的時候,會以...號取代,也就是不顯示,我一直以爲...是空數組的意思,真是無語。在網上找到了完全顯示的方法,下面貼下鏈接:
http://blog.sina.com.cn/s/blog_461c24d50101h62x.html
1.數據庫的設計:
至少三個字段(id,pid,name),下面是我的數據庫設計
2.接下來就是PHP代碼部分:
<?php
$link=mysql_connect("localhost","root","");
mysql_select_db("test",$link);
$sql="select * from classfiy where id";
$result=mysql_query($sql);
$assoc=array();
while($row=mysql_fetch_assoc($result))
{
array_push($assoc,$row);
}
$a=fun($assoc,0);
$str=print_fun($a);
echo $str;
//打印分類
function print_fun($assoc)
{
$str="<ul>";
foreach($assoc as $key=>$value)
{
$str.="<li>".$value["name"]."</li>";
if(!empty($value["list"]))
$str.=print_fun($value["list"]);
}
$str.="</ul>";
return $str;
}
//遞歸實現分類
function fun($assoc,$id)
{
$temp=array();
foreach($assoc as $key=>$value)
{
if($value["pid"]==$id)
{
$assoc[$key]["list"]=array();
$assoc[$key]["list"]=fun($assoc,$value["id"]);
array_push($temp,$assoc[$key]);
}
}
return $temp;
}
?>
3.查看結果: