使用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源码加密 仿微盾PHP加密专家(PHPCodeLock)
May 06 PHP
第六章 php目录与文件操作
Dec 30 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
Aug 23 PHP
php中strtotime函数用法详解
Nov 15 PHP
php curl 上传文件代码实例
Apr 27 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
Jul 06 PHP
总结PHP删除字符串最后一个字符的三种方法
Aug 30 PHP
PHP数据对象PDO操作技巧小结
Sep 27 PHP
php的常量和变量实例详解
Jun 27 PHP
PHP实现微信退款功能
Oct 02 PHP
php微信公众号开发之校园图书馆
Oct 20 PHP
PHP中用Trait封装单例模式的实现
Dec 18 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详解ASCII码对照表与字符转换
2011/12/05 PHP
PHP封装的字符串加密解密函数
2015/12/18 PHP
php-fpm开启状态统计的方法详解
2017/06/23 PHP
PHP赋值的内部是如何跑的详解
2019/01/13 PHP
javascript中input中readonly和disabled区别介绍
2012/10/23 Javascript
Jquery 动态生成表格示例代码
2013/12/24 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
Angular实现预加载延迟模块的示例
2017/10/12 Javascript
vue.js实现标签页切换效果
2018/06/07 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
layui 表格操作列按钮动态显示的实现方法
2019/09/06 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
2020/01/16 Javascript
nodejs中内置模块fs,path常见的用法说明
2020/11/07 NodeJs
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
python连接mysql并提交mysql事务示例
2014/03/05 Python
Python SQLite3数据库操作类分享
2014/06/10 Python
Python入门教程之if语句的用法
2015/05/14 Python
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
python中datetime模块中strftime/strptime函数的使用
2018/07/03 Python
python实现猜数字游戏
2020/03/25 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
请介绍一下WSDL的文档结构
2013/03/17 面试题
毕业自我鉴定范文
2013/11/06 职场文书
客服主管岗位职责
2013/12/13 职场文书
海洋科学专业求职信
2014/08/10 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
2014年档案管理工作总结
2014/11/17 职场文书
2015年五四青年节演讲稿
2015/03/18 职场文书