使用PHP数组实现无限分类,不使用数据库,不使用递归.
2018-09-07 11:54
复制代码 代码如下:
<?php
classcat
{
public$data;
publicfunction__construct()
{
@includedata.php;
$this->data=$class;
}
publicfunctionCreateSortLevel($fatherlevel)
{
if(empty($fatherlevel))
{
if(is_array($this->data))
{
$fast_level=array();
foreach($this->dataas$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))
{
case1:
return00{$sub};
break;
case2:
return0{$sub};
break;
case3:
return$sub;
break;
}
}
else
{
return001;
}
}
foreach($this->dataas$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))
{
case1:
returnsubstr($max_two_level,0,strlen($max_two_level)-1).$sub;
break;
case2:
returnsubstr($max_two_level,0,strlen($max_two_level)-2).$sub;
break;
case3:
returnsubstr($max_two_level,0,strlen($max_two_level)-3).$sub;
break;
}
}
else
{
return$fatherlevel.001;
}
}
publicfunctionorders()
{
$op=$this->data;
$this->array_usort($op,sortlevel,SORT_ASC);
return$op;
}
publicfunctionadd_cat($sortname,$sortlevel)
{
$data=time();
$arr=array
(
{$data}=>array
(
sortname=>$sortname,
sortlevel=>$this->CreateSortLevel($sortlevel)
)
);
$rs=$this->data+$arr;
$this->add_wirte($rs);
}
privatefunctionarray_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]]);
}
elseif($args[$i]===SORT_DESC)
{
$order=-1*;
}
elseif(is_string($args[$i]))
{
$i--;
break;
}
}
$cmd.=if($num=$con)return$order$num;else;
if($order!=)
{
$i++;
}
}
@usort($array,@create_function($a,$b,$cmdreturn0;));
}
publicfunctionwirte($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);
}
publicfunctionadd_wirte($rs)
{
$array=<?phprn;
$array.=$class=array.rn(rn;
foreach($rsas$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=newcat();
if($_GET[action]==add)
{
if(strlen($_POST[sortname])<2)
{
echo<scriptlanguage=JavaScript>alert(请添加分类名字)</script>;
echo<scriptlanguage=JavaScript>location.href=/cat.php?action=tpl</script>;
exit;
}
if(file_exists(data.php))
{
$cat->add_cat($_POST[sortname],$_POST[sortlevel]);
echo<scriptlanguage=JavaScript>alert(添加成功)</script>;
echo<scriptlanguage=JavaScript>location.href=/cat.php</script>;
exit;
}
else
{
$cat->wirte($_POST[sortname],$_POST[sortlevel]);
echo<scriptlanguage=JavaScript>alert(添加成功)</script>;
echo<scriptlanguage=JavaScript>location.href=/cat.php</script>;
exit;
exit;
}
}
if($_GET[action]==tpl)
{
echo<formid=form1name=form1method=postaction=cat.php?action=add>;rn;
echo<selectname=sortlevel>.rn;
echo<optionvalue=selected=selected>根分类</option>.rn;
foreach($cat->orders()as$val)
{
echo<optionvalue=.$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<inputname=sortnametype=textid=sortname/>.rn;
echo<inputtype=submitname=Submitvalue=提交/>;
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数组实现无限分类,不使用数据库,不使用递归.
文章链接:http://soscw.com/index.php/essay/11334.html