请问楼主你的数组中是不是
Array
(
[0] => Array
(
[as_id] => 6aaa3f89bba3d5b222073f2c5bb1bcae
[as_name] => 食品、饮料
[parent_id] => 0
)
}
如果比较大的话是不是这种情况:Array
(
[0] => Array
(
[as_id] => 6aaa3f89bba3d5b222073f2c5bb1bcae
[as_name] => 食品、饮料
[parent_id] => 0
)
....
[n] => Array
(
[as_id] => 6aaa3f89bba3d5b222073f2c5bb1bcae
[as_name] => 食品、饮料
[parent_id] => 0
)
}
是不是这种情况?
Array
(
[0] => Array
(
[as_id] => 6aaa3f89bba3d5b222073f2c5bb1bcae
[as_name] => 食品、饮料
[parent_id] => 0
)
}
如果比较大的话是不是这种情况:Array
(
[0] => Array
(
[as_id] => 6aaa3f89bba3d5b222073f2c5bb1bcae
[as_name] => 食品、饮料
[parent_id] => 0
)
....
[n] => Array
(
[as_id] => 6aaa3f89bba3d5b222073f2c5bb1bcae
[as_name] => 食品、饮料
[parent_id] => 0
)
}
是不是这种情况?
解决方案 »
- _get_script_url() discuzx2中得到当前url的方法实现细节?
- zend 加密授权的问题
- php里面有没有函数可以操作linux里的账号
- 请教:<table width=100 class='c' style='border:1' title="t" >要取得这里面所有的属性,属性位置不定,该正则该怎么写?
- 各位大侠,怎样 解析接收到的HTTP邮件中的字段?十万火急,万分感谢。
- php socket 与C通讯
- 偶是女的程序员 有没有公司要招人的
- 在php中怎么实现跳转到哪个函数,或者页面
- 如何用PHP控制媒体播放?
- 如何用PHP做一个http的服务器上传下载文件?
- 在iframe中的header怎么弹出新的窗口?
- 请教用readfile读ftp文件的问题
http://expert.csdn.net/Expert/TopicView1.asp?id=2980875
里面的“递归循环”
$arrtest=Array(0=>Array('as_id'=>"6aaa3f89bba3d5b222073f2c5bb1bcae",
'as_name'=>"食品、饮料",
'parent_id'=>0
),1=>Array( 'as_id'=>"053dca7d73ddc3df57309301a7df030e",
'as_name'=>"乳制品",
'parent_id'=>"6aaa3f89bba3d5b222073f2c5bb1bcae"
),
2 => Array
(
'as_id'=>"0b0364d0af099368e4d9734c8de6faf2",
'as_name'=>"二手食品饮料加工设备",
'parent_id'=>"6aaa3f89bba3d5b222073f2c5bb1bcae"
),
3 => Array
(
'as_id'=>"12fd5b7ad57a5162edf058d3dfcb7d34",
'as_name'=>"休闲食品",
'parent_id'=>"6aaa3f89bba3d5b222073f2c5bb1bcae"
),
4 => Array
(
'as_id'=>"5b6088d469bce4fccae8cf517e5a5176",
'as_name'=>"保健食(药)品",
'parent_id'=>"6aaa3f89bba3d5b222073f2c5bb1bcae"
),
5 => Array
(
'as_id'=>"bb6efddf7e4ecbe5aa24cd0fcc253eac",
'as_name'=>"其他未分类",
'parent_id'=>"6aaa3f89bba3d5b222073f2c5bb1bcae"
)
);
function distree($arr,$str_id)
{
$distree=array();
$j=0;
for($i=0;$i<count($arr);$i++)
{
if ($arr[$i]['parent_id']==$str_id){
$distree[$j]['as_id']=$arr[$i]['as_id'];
$distree[$j]['as_name']=$arr[$i]['as_name'];
$distree[$j]['parent_id']=$arr[$i]['parent_id'];
$t=0;
for($y=0;$y<count($arr);$y++){
$distree1=array();
if(($arr[$y]['parent_id']==$arr[$i]['as_id'])){
$distree[$j]['child'][$t]['as_id']=$arr[$y]['as_id'];
$distree[$j]['child'][$t]['as_name']=$arr[$y]['as_name'];
$distree[$j]['child'][$t]['parent_id']=$arr[$y]['parent_id'];
$t++;
}
}
$j++;
}
}
return $distree;
}
print "<pre>";
print_r(distree($arrtest,0));
print "</pre>";
?>
这是笨方法,一会把递归的写上来(调试中)。
<?
//测试数据
$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);
?>本算法的特点在于利用“穿线的B+树”和php的传址算符“&”,只用一个循环就可完成到“树”的转换