按http://developer.51cto.com/art/201103/252703.htm的要求實現了效果,但表徵圖沒有實現,css也沒實現,還有標題所說的要麼是餓搞要麼是已經到期了,不要指望能做出來就有工作了,我也是順便拿來練手,保持對代碼的熱度!
我之所以實現這個功能,是一定程度上能衡量php開發的水平,需要一定的功力.我針對痛點,採用了兩個key value形式的數組去應對所需要的操作,這移置到memcache等緩衝系統上也很方便.
功能是實現一個分類的摺疊和開啟,用於顯示商品或者其它資訊的分類. 該分類的每一項可以摺疊和收合(展開和收縮, 如果有子分類的話). 分類的級數不固定.
未經處理資料為數組
$cats = array(
array(
'id' => 1,
'name' => '電子遊戲',
'children' => array(
array(
'id' => 3,
'name' => '競技遊戲1',
'children' => null,
),
array(
'id' => 5,
'name' => '競技遊戲2',
'children' => null,
),
array(
'id' => 7,
'name' => '競技遊戲3',
'children' => null,
),
),
),
array(
'id' => 2,
'name' => '學術和教育',
'children' => array(
array(
'id' => 4,
'name' => '自然科學',
'children' => null,
),
array(
'id' => 6,
'name' => '人文社科',
'children' => null,
),
array(
'id' => 8,
'name' => '期刊會議',
'children' => null,
),
array(
'id' => 9,
'name' => '高校名稱',
'children' => array(
array(
'id' => 14,
'name' => '中國大學',
'children' => null,
),
array(
'id' => 16,
'name' => '國際大學',
'children' => null,
),
),
),
),
),
array(
'id' => 10,
'name' => '生活',
'children' => array(
array(
'id' => 12,
'name' => '生活1',
'children' => null,
),
),
),
);
我對應處理
function setLoopIndex($val,$pref,&$index,&$nameArr){
if(!empty($val)){//非空
foreach($val as $key=>$v){
$child_pref=trim($pref. ' ' .$key);
$index[$v['id']]=$child_pref;
$nameArr[$child_pref]=$v['name'].":".$v['id'];
setLoopIndex($v['children'],$child_pref,&$index,&$nameArr);//迴圈處理該子類
}
}
}
//如果資料量太大的話放memcache等其他方式,因為都是key value資料存放區方式
$index=array();//儲存id和對應索引值
$nameArr=array();//儲存索引值和對應名字
setLoopIndex($cats,'',&$index,&$nameArr);//迴圈處理
代碼見附件,如有什麼問題請回帖,歡迎拍磚!將解壓後的檔案放在網站根目錄,則訪問的地址是127.0.0.1/test.php,其他看下代碼就知道了,不是很複雜,繼續聲明:歡迎拍磚,特別是有更好的實現能交流學習!
本文出自 “純技術純探討” 部落格,請務必保留此出處http://hjun169.blog.51cto.com/3600246/891533