使用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实现禁用IE和火狐的缓存问题
Dec 03 PHP
基于PHP静态类的原罪详解
May 06 PHP
PHP 通过Socket收发十六进制数据的实现代码
Aug 16 PHP
php获取远程图片体积大小的实例
Nov 12 PHP
PHP上传文件时自动分配路径的方法
Jan 09 PHP
十幅图告诉你什么是PHP引用
Feb 22 PHP
PHP使用递归方式列出当前目录下所有文件的方法
Jun 02 PHP
PHP中使用curl伪造IP的简单方法
Aug 07 PHP
php采用session实现防止页面重复刷新
Dec 24 PHP
PHP+iframe图片上传实现即时刷新效果
Nov 18 PHP
PHP中的函数声明与使用详解
May 27 PHP
PHP判断json格式是否正确的实现代码
Sep 20 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
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
php + WebUploader实现图片批量上传功能
2019/05/06 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
UpdatePanel和Jquery冲突的解决方法
2013/04/01 Javascript
javascript教程之不完整的继承(js原型链)
2014/01/13 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
JS的数组迭代方法
2015/02/05 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
javascript弹出带文字信息的提示框效果
2016/07/19 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
jQuery中的100个技巧汇总
2016/12/15 Javascript
vue vue-Router默认hash模式修改为history需要做的修改详解
2018/09/13 Javascript
详解nodejs 配置文件处理方案
2019/01/02 NodeJs
vue开发拖拽进度条滑动组件
2019/09/21 Javascript
vue父组件给子组件的组件传值provide inject的方法
2019/10/23 Javascript
jQuery实现雪花飘落效果
2020/08/02 jQuery
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
[11:44]Ti9 OG夺冠时刻
2019/08/25 DOTA
python实现的希尔排序算法实例
2015/07/01 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
numpy基础教程之np.linalg
2019/02/12 Python
OpenCV搞定腾讯滑块验证码的实现代码
2019/05/18 Python
Django admin model 汉化显示文字的实现方法
2019/08/12 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
解析HTML5中的新功能本地存储localStorage
2016/03/01 HTML / CSS
大二学生职业生涯规划书
2014/02/05 职场文书
初中军训感想300字
2014/03/05 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
领导视察通讯稿
2015/07/18 职场文书
2016年小学植树节活动总结
2016/03/16 职场文书
 python中的元类metaclass详情
2022/05/30 Python