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

代码如下:

<?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>";
}
?>

(0)

相关推荐

  • php 无极分类(递归)实现代码

    复制代码 代码如下: <?php $conn=mysql_connect("localhost","root","myoa888"); mysql_select_db("lost63",$conn) or die("select db error"); $sql[]="Create TABLE `lost63`.`dd_book_class` ( `id` INT NOT NULL AUTO

  • php实现无限级分类实现代码(递归方法)

    开始以为这样的功能似乎很难,之前也做过一个百科的东西,其中也涉及到了分类的功能,不过不是无限级的分类,而是简单的实现了固定的三级分类,当时是自己设计的,想在想起来实现方法太土了,其实三级分类也只是无限级分类的一种特殊情况而已嘛.经过一段时间考虑,已经有了一些眉目,到网上一查,原来这样的东西铺天盖地,呵呵.其实无限级下拉列表功能是很简单的,无非就是用一个递归算法就好啦. 首先要设计数据库,需要建一个表,里面存储分类信息,至少需要3个字段,第一个是主键(ID),第二个是父级分类ID(parentid

  • thinkphp实现无限分类(使用递归)

    本文实例为大家分享了thinkphp实现无限分类的详细代码,希望对大家学习无限分类有所启发. 数据库:test 数据表:(tp_category): Common/conf/config.php 'DB_CONFIG2' => array( 'db_type' => 'mysql', 'db_user' => 'root', 'db_pwd' => '', 'db_host' => 'localhost', 'db_port' => '3306', 'db_name'

  • PHP实现无限级分类(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构.文章分类.无限级分类的难点在于"输出"和"查询",例如 将文章分类输出为<ul>列表形式: 查找分类A下面所有分类包含的文章. 1.实现原理 几种常见的实现方法,各有利弊.其中"改进前序遍历树"数据结构,便于输出和查询,但是在移动分类和常规理解上有些复杂. 2.数据结构 <?php $list = array( array('id'=>1, 'fid'=>0, 'title

  • php无限极分类递归排序实现方法

    本文实例讲述了php无限极分类递归排序实现方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: function order ($array,$pid=0){     $arr = array();             foreach($array as $v){         if($v['pid']==$pid){             $arr[] = $v;             $arr = array_merge($arr,order($array,$v['

  • php递归实现无限分类生成下拉列表的函数

    复制代码 代码如下: /*------------------ */ //– 递归实现无限分类生成下拉列表函数 //– $tpl->assign('sort_list',createSortOptions ()); //– $tpl->assign('sort_list',createSortOptions ($sort_id)); /*------------------ */ function createSortOptions ($selected=0,$parent_id=0,$n=-

  • PHP 无限分类三种方式 非函数的递归调用!

    php无限分类大致有三种方式, 1.数据库通过设置父类ID来进行唯一索引,然后使用函数的递归调用实现无限分类: 2.数据库设计通过特定格式进行排列,然后使用mysql查询关键函数:concat.程序实现比较简单: 3.第三种不是太了解, 好像要使用到算法和数据结构进行排列. 今天我主要分享下第二种方式,一开始也是找了很多资料,确实比较难理解.不过最终还是给搞明白了,因此记下随笔,希望通过这篇文章能够帮助到大家. 一.数据库设计: 复制代码 代码如下: -- -- Table structure

  • PHP递归遍历多维数组实现无限分类的方法

    本文实例讲述了PHP递归遍历多维数组实现无限分类的方法.分享给大家供大家参考,具体如下: <?php //$data[]=array('id'=>1,'parentid'=>0,'name'=>'中国','img'=>'52091199'); $data[]=array('id'=>1,'parentid'=>0,'name'=>'中国'); $data[]=array('id'=>2,'parentid'=>0,'name'=>'美国')

  • php用数组返回无限分类的列表数据的代码

    复制代码 代码如下: /*------------------ */ //– 获取无限分类的列表数据 /*------------------ */ function get_sort ($parent_id=0,$n=-1) { global $db; static $sort_list = array (); $sql = "SELECT * FROM ".$db->table('article_sort')." WHERE `parent_id` = '{$par

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

    复制代码 代码如下: <?php class cat {     public $data; public function __construct()      {         @include "data.php";         $this->data = $class;     } public function CreateSortLevel($fatherlevel)     {         if(empty($fatherlevel))       

  • 帖几个PHP的无限分类实现想法~

    1.做网站的一般都会遇到处理分类的问题, 偶来帖几个处理无限分类的例子数据库的结构很简单: id, fatcher_id, name, ...... 这样的设计短小精悍,完全满足3NF..可以完全绝大多数要求,OK,让偶们看看这种数据库结构下的程序实现. 1.递归查询数据库 最要命的做法~也是最好实现的做法 类别1 类别1.1 类别1.1.1 类别1.2 类别2 类别2.1 类别3 类别3.1 类别3.2 ...... 为了生成这样的目录结构,程序递归一次就查询一次数据库,在您任何涉及分类的地方

  • 利用php递归实现无限分类 格式化数组的详解

    我们要做一个商品的无限分类首先数据库字段为:id ----------商品主键idfid ---------- 商品父idname ---------- 商品名最后输出的数组格式为 复制代码 代码如下: <PRE class=php name="code"><PRE class=php name="code">array( 0=>array(  'id'=>1,  'fid'=>0,  'name'=>'法国货'  '

  • PHP无限分类(树形类)

    复制代码 代码如下: <?php//模拟PHP无限分类查询结果return array(    array(        'id'=>1,        'pid'=>0,        'name'=>'主页'    ),    array(        'id'=>2,        'pid'=>0,        'name'=>'新闻'    ),    array(        'id'=>3,        'pid'=>0,   

  • PHP无限分类(树形类)的深入分析

    PHP无限分类,Google一下就能找到很多相关资料,思路比较拉风的,也是用得比较多的就是分类表至少有id,pid,name三个字段,id自增表分类,pid为父分类,name为分类名,这样就构成了一棵树,如下,算是我查询分类表得到的结果集. 复制代码 代码如下: <?php//模拟PHP无限分类查询结果return array(    array(        'id'=>1,        'pid'=>0,        'name'=>'主页'    ),    array

  • PHP如何通过传引用的思想实现无限分类(代码简单)

    无限级分类,主要是通过储存上级分类的id以及分类路径来实现 在我的Simpla中,用到了无限分类,使用了PHP的传引用思想实现无限分类的方法,可以完美展示类似这样的分类模式. id   pid   name 1    0     四川 2    0     重庆 3    1     成都 4    1     绵阳 5    3     高新区 代码如下所示: /** * 数组变成无限级分类--传引用思想 * @param array $items * @return array */ pub

  • php+mysql实现无限分类实例详解

    本文实例讲述了php+mysql实现无限分类的方法.分享给大家供大家参考.具体分析如下: 1.数据库通过设置父类ID来进行唯一索引,然后使用函数的递归调用实现无限分类: 2.数据库设计通过特定格式进行排列,然后使用mysql查询关键函数:concat,程序实现比较简单,首先我们假设有这样的一个三级分类,新闻→PHP新闻→PHP6.0出来了. 如果我们要查找"PHP6.0出来了"这条新闻,我们先点击新闻,然后再点击PHP新闻,就可以查出来了,也就是说我们可以通过祖父类一级一级地往下找,反

随机推荐