按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,其他看下代码就知道了,不是很复杂,继续声明:欢迎拍砖,特别是有更好的实现能交流学习!
转载于:https://blog.51cto.com/hjun169/891533