数组模拟无限级分类及可伸缩——php&&js(jQuery)

来源:互联网 发布:视频人声消音软件 编辑:程序博客网 时间:2024/06/05 22:33
<?php

$list=array(
array('id'=>1,'name'=>'数码','path'=>'0,','pid'=>0),
array('id'=>2,'name'=>'服装','path'=>'0,','pid'=>0),
array('id'=>3,'name'=>'手机','path'=>'0,1,','pid'=>1),
array('id'=>4,'name'=>'mp3','path'=>'0,1,','pid'=>1),
array('id'=>5,'name'=>'智能手机','path'=>'0,1,3,','pid'=>3),
array('id'=>6,'name'=>'水果手机','path'=>'0,1,3,','pid'=>3),
array('id'=>7,'name'=>'摩托','path'=>'0,1,3,5,','pid'=>5),
);

$newlist=array();
foreach($list as $v){
$nb=str_repeat("&nbsp;&nbsp;", count(explode("," ,$v["path"])));
$v["name"]=$nb.$v["name"];

$newk=$v['path'].$v['id'].",";

$v["newk"]=$newk;
$newlist[]=$v;
}

function cmp_arr($arr1,$arr2){
if($arr1['newk']==$arr2['newk']){
return 0;
}
return $arr1['newk']<$arr2['newk']?-1:1;
}

usort($newlist, cmp_arr);
echo "<pre>";
var_dump($newlist);
echo "</pre>";
?><!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>分类</title>
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
<script type="text/javascript">

$(function(){

$(".sgin").live("click",function(){

var pid=$(this).attr("pid");
var sgin=$(this).html();
if(sgin=="[+]"){
var tr=$(".pid_"+pid);
$(this).parent().parent().after(tr);

tr.show();

$(this).html("[-]");

}else if(sgin=='[-]'){

$(".pid_"+pid).hide();
$(this).html("[+]");

}

})
})

</script>
</head>
<body>
<table border="1">
<tr>
<th>编号</th><th>分类名称</th>
</tr>
<?php 
$sgin="";
foreach($newlist as $v){ 
if($v['pid']!=0){$sn="display:none";}else{$sn="";}
foreach($newlist as $val){

if($v['id']==$val['pid']){

$sgin="[+]";
break;
}else{
$sgin="&nbsp;&nbsp;&nbsp;";
}
}
?>
<tr class="pid_<?php echo $v['pid']?>" style="<?php echo $sn?>" >

<td><?php echo $v['id']?></td>
<td><span class="sgin" pid="<?php echo $v['id'] ?>" style="cursor:pointer;"><?php echo $sgin ?></span> <?php echo $v['name']?></td>
</tr>

<?php } ?>
</table>
</body>
</html>
<?php

$list=array(
array('id'=>1,'name'=>'数码','path'=>'0,','pid'=>0),
array('id'=>2,'name'=>'服装','path'=>'0,','pid'=>0),
array('id'=>3,'name'=>'手机','path'=>'0,1,','pid'=>1),
array('id'=>4,'name'=>'mp3','path'=>'0,1,','pid'=>1),
array('id'=>5,'name'=>'智能手机','path'=>'0,1,3,','pid'=>3),
array('id'=>6,'name'=>'水果手机','path'=>'0,1,3,','pid'=>3),
array('id'=>7,'name'=>'摩托','path'=>'0,1,3,5,','pid'=>5),
);

$newlist=array();
foreach($list as $v){
$nb=str_repeat("&nbsp;&nbsp;", count(explode("," ,$v["path"])));
$v["name"]=$nb.$v["name"];

$newk=$v['path'].$v['id'].",";

$v["newk"]=$newk;
$newlist[]=$v;
}

function cmp_arr($arr1,$arr2){

if($arr1['newk']==$arr2['newk']){
return 0;
}

return $arr1['newk']<$arr2['newk']?-1:1;
}

usort($newlist, cmp_arr);
/*echo "<pre>";
var_dump($newlist);
echo "</pre>";*/


?><!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>分类</title>
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
<script type="text/javascript">

$(function(){

$(".sgin").live("click",function(){

var pid=$(this).attr("pid");
var sgin=$(this).html();
if(sgin=="[+]"){
var tr=$(".pid_"+pid);
$(this).parent().parent().after(tr);

tr.show();

$(this).html("[-]");

}else if(sgin=='[-]'){

$(".pid_"+pid).hide();
$(this).html("[+]");

}

})
})

</script>
</head>
<body>
<table border="1">
<tr>
<th>编号</th><th>分类名称</th>
</tr>
<?php 
$sgin="";
foreach($newlist as $v){ 
if($v['pid']!=0){$sn="display:none";}else{$sn="";}
foreach($newlist as $val){

if($v['id']==$val['pid']){

$sgin="[+]";
break;
}else{
$sgin="&nbsp;&nbsp;&nbsp;";
}
}


?>
<tr class="pid_<?php echo $v['pid']?>" style="<?php echo $sn?>" >

<td><?php echo $v['id']?></td>
<td><span class="sgin" pid="<?php echo $v['id'] ?>" style="cursor:pointer;"><?php echo $sgin ?></span> <?php echo $v['name']?></td>
</tr>

<?php } ?>
</table>
</body>
</html>