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