使用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 相关文章推荐
phpexcel导出excel的颜色和网页中的颜色显示不一致
Dec 11 PHP
PHP实现邮件群发的源码
Jun 18 PHP
PHP获取文件的MD5值并判断是否被修改的例子
Jun 19 PHP
PHP SESSION的增加、删除、修改、查看操作
Mar 20 PHP
php简单smarty入门程序实例
Jun 11 PHP
php 利用socket发送HTTP请求(GET,POST)
Aug 24 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
Mar 17 PHP
PHP二分查找算法示例【递归与非递归方法】
Sep 29 PHP
利用php实现一周之内自动登录存储机制(cookie、session、localStorage)
Oct 31 PHP
PHP文件操作详解
Dec 30 PHP
php之可变变量的实例详解
Sep 12 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 - Html Transfer Code
2006/10/09 PHP
PHP删除非空目录的函数代码小结
2013/02/28 PHP
curl和libcurl的区别简介
2015/07/01 PHP
php多文件打包下载的实例代码
2017/07/12 PHP
JavaScript 判断日期格式是否正确的实现代码
2011/07/04 Javascript
jQuery中attr()和prop()在修改checked属性时的区别
2014/07/18 Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
2015/05/25 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
使用store来优化React组件的方法
2017/10/23 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
Python实现去除列表中重复元素的方法总结【7种方法】
2019/02/16 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
python视频按帧截取图片工具
2019/07/23 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
Python3爬虫中识别图形验证码的实例讲解
2020/07/30 Python
HTML5公共页面提取作为公用代码的方法
2020/06/30 HTML / CSS
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
可持续未来的时尚基础:Alternative Apparel
2019/05/06 全球购物
3个CCIE对一个工程师的面试题
2012/05/06 面试题
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
敬老院标语
2014/06/27 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
小学生心理健康活动总结
2015/05/08 职场文书
文化大革命观后感
2015/06/17 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书