欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

求好的方法~?

程序员文章站 2024-02-15 16:36:16
...
数据如:
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

相关标签: 求好的方法~?