数据如:
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