php数组的重组及多级下拉菜单

[算法大作战]无限级分类与多级下拉菜单实用
<?  
//测试数据  
 $ar = array(   
 array('id'=>1,'pid'=>0),  
 array('id'=>2,'pid'=>0),  
 array('id'=>3,'pid'=>2),  
 array('id'=>4,'pid'=>0),  
 array('id'=>5,'pid'=>3),  
 array('id'=>6,'pid'=>1),  
 array('id'=>7,'pid'=>1),  
 array('id'=>8,'pid'=>6),  
 array('id'=>9,'pid'=>7),  
 array('id'=>10,'pid'=>9)  
 );  
  
 //排序函数  
 function cmd($a,$b) {  
   if($a['pid']==$b['pid']) return 0;  
   return $a['pid']>$b['pid']?1:-1;  
 }  
  
 //排序,为避免数据中父节点在子节点后面出现,这种情况在多次修改数据后经常会发生的  
 //排序的目的就是防止这种情况造成的混乱  
 uasort($ar,'cmd');  
  
 //定义目标数组  
 $d = array();  
 //定义索引数组,用于记录节点在目标数组的位置  
 $ind = array();  
  
 foreach($ar as $v) {  
   $v['child'] = array(); //给每个节点附加一个child项  
   if($v['pid'] == 0) {  
     $i = count($d);  
     $d[$i] = $v;  
     $ind[$v['id']] =& $d[$i];  
   }else {  
     $i = count($ind[$v['pid']]['child']);  
     $ind[$v['pid']]['child'][$i] = $v;  
     $ind[$v['id']] =& $ind[$v['pid']]['child'][$i];  
   }  
 }  
 //检查结果  
 print_r($d);  
 ?>  
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值