最简单的就是:
结构
复制内容到剪贴板
代码:
ID、NAME、FID、OID
1 测试一 0 1
2 测试1 1 1
3 测试(1) 2 1
4 测试二 0 2
5 测试2 1 2
6 测试3 4 1
7 测试(2) 6 1等等等。
算法:
复制内容到剪贴板
代码:
<?php
$array=array() //这里就是上面结构中的数据
//对数组按照级别进行排序
$code="if(\$a['fid']==\$b['fid'])";
$code.="{";
$code.=" return 0;";
$code.="}";
$code.="return (\$a['fid']>\$b['fid'])?1:-1;";
uasort($array,create_function('$a, $b', $code));
$c=array();
$d=array();
foreach ($array as $v)
{
$v['cid']=array();
if($v['fid']==0) //对根菜单按照oid排序
{
$i = count($c);
$c[$i] = $v;
$d[$v[id]] =& $c[$i];
usort($c,create_function('$m, $n',"if(\$m['oid']==\$n['oid']){return 0;}return (\$m['oid']>\$n['oid'])?1:-1;"));
}
else //对其他菜单按照oid排序
{
$i = count($d[$v['fid']]['cid']);
$d[$v['fid']]['cid'][$i] = $v;
$d[$v['id']] =& $d[$v['fid']]['cid'][$i];
usort($d[$v['fid']]['cid'],create_function('$m, $n',"if(\$m['oid']==\$n['oid']){return 0;}return (\$m['oid']>\$n['oid'])?1:-1;"));
}
}
$array=$c;
echo '';
print_r($array);
echo '';
?>