insert into `vm_nav` (`id`, `ctype`, `cid`, `name`, `ifshow`, `vieworder`, `opennew`, `url`, `type`) values(1, null, 0, 'index', 0, 1, 0, '', 'nav'),(2, null, 0, 'product', 1, 2, 0, '', 'nav'),(3, null, 0, 'member', 1, 3, 0, '', 'nav'),(4, null, 0, 'guide', 1, 4, 0, '', 'nav'),(5, null, 0, 'kehu', 1, 5, 0, '', 'nav'),(6, null, 0, 'about', 1, 6, 0, '', 'nav'),(7, null, 0, 'tehui', 1, 7, 0, '', 'nav'),(8, null, 3, 'member_index', 1, 1, 0, '', 'nav'),(9, null, 3, 'member_info', 1, 2, 0, '', 'nav');
求这种数据 array(8) { [0]=> array(6) { [id]=> string(1) 2 [name]=> string(12) product [opennew]=> string(1) 0 [url]=> string(0) [ctype]=> null [cid]=> string(1) 0 } [1]=> array(6) { [id]=> string(1) 3 [name]=> string(18) member [opennew]=> string(1) 0 [url]=> string(0) [ctype]=> null [cid]=> string(1) 0 } [2]=> array(6) { [id]=> string(1) 8 [name]=> string(12) member_index [opennew]=> string(1) 0 [url]=> string(0) [ctype]=> null [cid]=> string(1) 3 } [3]=> array(6) { [id]=> string(1) 9 [name]=> string(12) member_info [opennew]=> string(1) 0 [url]=> string(0) [ctype]=> null [cid]=> string(1) 3 } [4]=> array(6) { [id]=> string(1) 4 [name]=> string(12) guide [opennew]=> string(1) 0 [url]=> string(0) [ctype]=> null [cid]=> string(1) 0 } [5]=> array(6) { [id]=> string(1) 5 [name]=> string(12) kehu [opennew]=> string(1) 0 [url]=> string(0) [ctype]=> null [cid]=> string(1) 0 } [6]=> array(6) { [id]=> string(1) 6 [name]=> string(12) about [opennew]=> string(1) 0 [url]=> string(0) [ctype]=> null [cid]=> string(1) 0 } [7]=> array(6) { [id]=> string(1) 7 [name]=> string(12) tehui [opennew]=> string(1) 0 [url]=> string(0) [ctype]=> null [cid]=> string(1) 0 }}
我用了一个笨办法:先foreach吧cid 插入到一个son成员里 然后再一个foreach 放到其后面,描述的不清楚,代码如下:
function nav_list(){ $navlist = get_navigator(); sort($navlist['nav']); //$navlist['nav'] 就是取出所有数据 ,上面用sort排了下序 foreach($navlist['nav'] as $k=>$v) { if($v['cid'] != 0) { //插入到一个son成员里 $l[$v['cid']]['son'][] = $v; }else{ $l[$v['id']] = $v; } } foreach($l as $k=>$v){ if($v['son']){ //消除son成员 $tmp[] = array_diff_key($v,array('son'=>'')); foreach($v['son'] as $key=>$val){ //再一个foreach 放到其后面 $tmp[] = $val; } }else{ $tmp[] = $v; } } return $tmp;}
~ 怎么样会快捷一点 ~??? 求解
回复讨论(解决方案) if(cid == id)
这条cid数据就放在id数据后面 说不清楚了~~~~
select id, ctype, cid, name, ifshow, vieworder, opennew, url, type from vm_nav where ifshow and cid=0unionselect cid as id, ctype, cid, name, ifshow, vieworder, opennew, url, type from vm_nav where ifshow and cid>0order by id
一位数组转化二维?
select id, ctype, cid, name, ifshow, vieworder, opennew, url, type from vm_nav where ifshow and cid=0unionselect cid as id, ctype, cid, name, ifshow, vieworder, opennew, url, type from vm_nav where ifshow and cid>0order by id
这样取出来的数据 cid在父id前面:如
insert into `vm_nav` (`id`, `ctype`, `cid`, `name`, `ifshow`, `vieworder`, `opennew`, `url`, `type`) values(2, null, 0, 'product', 1, 2, 0, '', 'nav'),(3, null, 3, 'member_info', 1, 2, 0, '', 'nav'),(3, null, 3, 'member_index', 1, 1, 0, '', 'nav'),(3, null, 0, 'member', 1, 3, 0, '', 'nav'),(4, null, 0, 'guide', 1, 4, 0, '', 'nav'),(5, null, 0, 'kehu', 1, 5, 0, '', 'nav'),(6, null, 0, 'about', 1, 6, 0, '', 'nav'),(7, null, 0, 'tehui', 1, 7, 0, '', 'nav');
好像是我吧事情搞复杂了~ ~
一位数组转化二维?
嗯 ,但 一维数组中如果有cid则需要排在cid后面,cid可以理解为父节点的下标,根节点的cid=0~~~ 大概就这个意思 ~ 不应该的,排序键相同时是按自然顺序的
可带上 cid 排序
order by id, cid
