使用PHP数组实现无限分类,不使用数据库,不使用递归.


Posted in PHP onDecember 09, 2006
<?php class cat 
{ 
    public $data; 
    public function __construct()  
    { 
        @include "data.php"; 
        $this->data = $class; 
    } 

    public function CreateSortLevel($fatherlevel) 
    { 
        if(empty($fatherlevel)) 
        { 
            if(is_array($this->data)) 
            { 
                $fast_level = array(); 
                foreach($this->data as $value) 
                { 
                    if(strlen($value["sortlevel"]) == 3) 
                    { 
                        $fast_level[] = $value["sortlevel"]; 
                    } 
                } 
                $max_fast_level = max($fast_level); 
                unset($fast_level); 
                $sub   = ceil($max_fast_level) + 1; 
                switch(strlen($sub)) 
                { 
                    case 1: 
                        return "00{$sub}"; 
                        break; 
                    case 2: 
                        return "0{$sub}"; 
                        break; 
                    case 3: 
                        return $sub; 
                        break; 
                } 
            } 
            else 
            { 
                return "001"; 
            } 
        } 
        foreach($this->data as $val) 
        { 
            if(eregi("^".$fatherlevel.".{3}$",$val["sortlevel"])) 
            { 
                $level[] = $val["sortlevel"]; 
            } 
        } 
        if(is_array($level)) 
        { 
            $max_two_level = max($level); 
            $sub   = ceil(substr($max_two_level,-3)) + 1; 
            switch(strlen($sub)) 
            { 
                case 1: 
                    return substr($max_two_level,0,strlen($max_two_level)-1).$sub; 
                    break; 
                case 2: 
                    return substr($max_two_level,0,strlen($max_two_level)-2).$sub; 
                    break; 
                case 3: 
                    return substr($max_two_level,0,strlen($max_two_level)-3).$sub; 
                    break; 
            } 
        } 
        else 
        { 
            return $fatherlevel."001"; 
        } 
    } 
    public function orders() 
    { 
        $op = $this->data; 
        $this->array_usort($op,"sortlevel",SORT_ASC); 
        return $op; 
    } 
    public function add_cat($sortname,$sortlevel) 
    { 
        $data = time(); 
        $arr = array 
        ( 
            "{$data}" => array 
            ( 
              "sortname"  => $sortname, 
              "sortlevel" => $this->CreateSortLevel($sortlevel) 
            ) 
         ); 
        $rs = $this->data + $arr; 
        $this->add_wirte($rs); 
    } 
    private function array_usort(&$array) 
    { 
        $args = func_get_args(); 
        for($i=1,$cmd='',$size=count($args);$i<$size;$i++) 
        { 
            $num   = $i; 
            $order = ""; 
            $con   = "@strcmp($a['$args[$num]'],$b['$args[$num]'])"; 
            while(++$i < $size) 
            { 
                if($args[$i] === SORT_NUMERIC) 
                { 
                    $con = "($a['$args[$num]']-$b['$args[$num]'])"; 
                } 
                else if($args[$i] === SORT_DESC) 
                { 
                    $order = "-1*"; 
                } 
                else if(is_string($args[$i])) 
                { 
                    $i--; 
                    break; 
                } 
            } 
            $cmd .= "if($num = $con)return $order$num;else "; 
            if($order != '') 
            { 
                $i++; 
            } 
        } 
        @usort($array,@create_function('$a,$b',"$cmd return 0;")); 
    } 
    public function wirte($sortname,$sortlevel) 
    { 
        $array  = "<?phprn"; 
        $array .= '$class = array'."rn(rn"; 
        $array .= '  "'.time().'" => array'."rn"; 
        $array .= '      ('."rn"; 
        $array .= '           "sortname" => "'.$sortname.'"'.",rn"; 
        $array .= '           "sortlevel" => "'.$this->CreateSortLevel($sortlevel).'"'."rn"; 
        $array .= '      )'."rn"; 
        $array .= ")rn?>"; 
        file_put_contents("data.php",$array); 
    } 
    public function add_wirte($rs) 
    { 
        $array  = "<?phprn"; 
        $array .= '$class = array'."rn(rn"; 
        foreach($rs as $key=>$value) 
        { 
            $array .= "rn"; 
            $array .= '  "'.$key.'" => array'."rn"; 
            $array .= '      ('."rn"; 
            $array .= '           "sortname" => "'.$value["sortname"].'"'.",rn"; 
            $array .= '           "sortlevel" => "'.$value["sortlevel"].'"'."rn"; 
            $array .= '      ),'; 
        } 
        $array  = substr($array,0,-1); 
        $array .= "rn)rn?>"; 
        file_put_contents("data.php",$array); 
    } 
} 

$cat = new cat(); 
if($_GET["action"] == "add") 
{ 
    if(strlen($_POST["sortname"]) < 2) 
    { 
        echo '<script language="JavaScript">alert("请添加分类名字")</script>'; 
        echo '<script language="JavaScript">location.href="/cat.php?action=tpl"</script>'; 
        exit; 
    } 
    if(file_exists("data.php")) 
    { 
        $cat->add_cat($_POST["sortname"],$_POST["sortlevel"]); 
        echo '<script language="JavaScript">alert("添加成功")</script>'; 
        echo '<script language="JavaScript">location.href="/cat.php"</script>'; 
        exit; 
    } 
    else 
    { 
        $cat->wirte($_POST["sortname"],$_POST["sortlevel"]); 
        echo '<script language="JavaScript">alert("添加成功")</script>'; 
        echo '<script language="JavaScript">location.href="/cat.php"</script>'; 
        exit; 
        exit; 
    } 
} 
if($_GET["action"] == "tpl") 
{ 
    echo '<form id="form1" name="form1" method="post" action="cat.php?action=add">';"rn"; 
    echo '<select name="sortlevel">'."rn"; 
    echo '<option value="" selected="selected">根分类</option>'."rn"; 
    foreach($cat->orders() as $val) 
    { 
        echo '<option value="'.$val["sortlevel"].'">'; 
        $clevel = strlen(substr($val['sortlevel'],0,-3)); 
        for($i = 0; $i < $clevel; $i++) 
        { 
            echo "-"; 
        } 
        echo $val['sortname']."</option>rn"; 
    } 
    echo "</select>rn"; 
    echo '  <input name="sortname" type="text" id="sortname" />'."rn"; 
    echo '<input type="submit" name="Submit" value="提交" />'; 
    echo "</form>"; 
    exit; 
} 
foreach($cat->orders() as $value) 
{ 
    $level = strlen(substr($value['sortlevel'],0,-3)); 
    for($i = 0; $i < $level; $i++) 
    { 
        echo "-"; 
    } 
    echo $value["sortname"]; 
    echo "<br>"; 
} 
?>
PHP 相关文章推荐
php-accelerator网站加速PHP缓冲的方法
Jul 30 PHP
linux下 C语言对 php 扩展
Dec 14 PHP
php 保留小数点
Apr 21 PHP
php数组保存文本与文本反编成数组实例
Nov 13 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
深入php内核之php in array
Nov 10 PHP
PHP单链表的实现代码
Jul 05 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
Dec 09 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
Nov 16 PHP
php实现获取农历(阴历)、节日、节气的类与用法示例
Nov 20 PHP
php中的explode()函数实例介绍
Jan 18 PHP
PHP的JSON封装、转变及输出操作示例
Sep 27 PHP
main.php
Dec 09 #PHP
global.php
Dec 09 #PHP
source.php查看源文件
Dec 09 #PHP
function.inc.php超越php
Dec 09 #PHP
粗略计算在线时间,bug:ip相同
Dec 09 #PHP
用PHP函数解决SQL injection
Dec 09 #PHP
php中处理模拟rewrite 效果
Dec 09 #PHP
You might like
php页面消耗内存过大的处理办法
2013/03/18 PHP
解析ajax事件的调用顺序
2013/06/17 PHP
php建立Ftp连接的方法
2015/03/07 PHP
php图片添加文字水印实现代码
2016/03/15 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
2016/04/20 PHP
PHP笛卡尔积实现算法示例
2018/07/30 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
javascript options属性集合操作代码
2009/12/28 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
node.js中的console.log方法使用说明
2014/12/09 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
canvas时钟效果
2017/02/16 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
JavaScript或jQuery 获取option value值方法解析
2020/05/12 jQuery
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
[02:55]2018DOTA2国际邀请赛勇士令状不朽珍藏Ⅲ饰品一览
2018/08/01 DOTA
Python实现的数据结构与算法之快速排序详解
2015/04/22 Python
python数组过滤实现方法
2015/07/27 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
pandas 数据结构之Series的使用方法
2019/06/21 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
2019/07/03 Python
python爬虫 基于requests模块的get请求实现详解
2019/08/20 Python
最简单的matplotlib安装教程(小白)
2020/07/28 Python
python中的yield from语法快速学习
2020/11/06 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
英国标志性生活方式品牌:Skinnydip London
2019/12/15 全球购物
端午节粽子促销活动方案
2014/02/02 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
服务整改报告
2014/11/06 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
2015年车间主任工作总结
2015/05/21 职场文书
法律意见书范文
2015/06/04 职场文书
2019最新版试用期劳动合同模板!
2019/07/04 职场文书